• javascript---数组----


    数组概述

    什么是数组

    存储一组或一系列相关数据的容器

    //数组开辟空间是连续的;
    //声明数组的关键字也是var;
    //对存储的类型没有要求,对存储的数据多的时候才采用数组。 //数组为对象类型,用console.log会输出数组的详细信息。 //prototype:原型,是个属性。
    //获取数组的长度:数组.length;
    

      

      数组的好处

    集中管理、访问速度和效率高



    什么是下标
    标识每一个空间唯一的索引号。
    最小下标为0,最大为长度-1;
    

      

    如何定义数组?

    json的方式(字面量的方式);
    ```
    var 数组名 = [1,2,3];
    var arr = [];
    arr[0] = 1;//[下标]
    arr[1] = 2;
    arr[2] = 3;
    arr[3] = 4;
    console.log(arr[0],arr[1],arr[3],arr[5]);//1,2,4,undefined;
    ```
    构造函数的方式(Array是内置的构造函数)
    ```
    var arr = [5];//数组元素为5
    var list = new Array(5);//数组长度为5,且数值不能为负值
    var list = new Array(3,4)//数组长度为2,且内部的元素为3.4
    两者的区别 [1] 构造函数:如果只有一个参数是正整数时,表示数组长度。如果是负数或小数,报错。其他情况表示数组的元素。 json:里面是啥都行。
    ```
    如何遍历数组?
    ```
    //遍历数组进行赋值(使用循环语句进行赋值)
    var arr = new Array(5);
    for(var i = 0;i < 5;i++){
        arr[i] = prompt("请输入数据:");
    }
    console.log(arr);
    
    
    
    
    //遍历数组单独输出元素
    var arr = new Array(5);
    for(var i = 0;i < 5;i++){
        arr[i] = prompt("请输入数据:");
    }
    for(var i = 0;i < arr.length; i ++){
        console.log(arr[i]);
    }
    ```
    

      

    数组的属性

    口诀:增删改截拼复排转

    1.增 (1)前增:unshift(增加的元素); 作用:在数组的首部增加元素,返回新增后数组的长度,会影响原数组。

    ```
        var arr=["a","b","c","d","e"];
        console.log(arr.unshift(1,2,3,4));//前面增加的内容
        console.log(arr);//长度为9
        var arr=["a","b","c","d","e"];
        console.log(arr.unshift([1,2,3,4]));//前增一个数组。
        console.log(arr);//长度为6,返回值为[1,2,3,4],a,b,c,d]
        ```
    (2)后增:push(增加的元素);
    作用:在数组的尾部增加元素,返回新增后数组的长度,会影响原数组。
    
        ```
      var arr=["a","b","c","d","e"];
      console.log(arr.push(1,2,3,4));//尾部增加的内容
      console.log(arr);
      ```
    

      

    2、 删

    (1)前删:shift();
    作用:删除数组首部的元素,一次只能删除一个元素。返回值为被删除的元素,会影响源 数组
            var arr=["a","b","c","d","e"];
            console.log(arr.shift());
            console.log(arr);//b,c,d,f
            
            ```
    (2)后删:pop(); 作用:删除数组尾部的元素,一次只能删除一个元素。返回值为被删除的元素,会影响源 数组
      var arr=["a","b","c","d","e"];
        console.log(arr.pop());
        console.log(arr);//a,b,c,d

    3、改

    splice(start,length,新增元素,...)//start:从哪个下标开始;length:删除几个元素 作用:可以再数组任意位置删除、修改、增加、任意数量的元素。返回值返回被删除的元素数组,会影响原数组。

       var arr=["a","b","c","d","e"];
        console.log(arr.splice(1,2));
        console.log(arr);//a,d,e
        ```
        
        ```
        var arr=["a","b","c","d","e"];
        console.log(arr.splice(1,0,1,2));
        console.log(arr);//a,1,2,b,c,d,e
    
    4、截
    
    slice(开始下标,结束下标)作用:截取数组中指定位置的元素,返回被截取的新数组,不影响源数组

       var arr=["a","b","c","d","e"];
        console.log(arr.slice(2,4));
        console.log(arr);//截取c,d.包含开始不包含结束,左闭右开。
        
        var arr=["a","b","c","d","e"];
        console.log(arr.slice(4,2));
        console.log(arr);//截取到的是一个空数组。
        
        var arr=["a","b","c","d","e"];
        console.log(arr.slice(-4,-2));
        console.log(arr);//b,c.反过来走,e为-1,以此类推。
        ```
    
    5、拼
    
        concat(新元素)
        作用:在指定数组后面拼接新的元素,返回拼接后的新数组,不影响原数组。

       var arr=["a","b","c","d","e"];
            console.log(arr.concart(-4,-2));
            console.log(arr);
            
         var arr=["a","b","c","d","e"];
                console.log(arr.concat([1,2,3,4]);
                console.log(arr) //拼接一个数组,会把数组中的每个数拿出来重新拼接,形成新的数组。
    
    6、复(复制)
    var arr=["a","b","c","d","e"];
    var list = arr;
    list[0] = 2;//会将原数组的相应值也进行修改,所以不能这么写。
    
    var arr=["a","b","c","d","e"];
    var list = [];
    for(var i = 0,len = arr.length;i < len;i++){
        list[i] = arr[i];
    }
    list[0] = 1;
    console.log(arr,list);
    
    var arr=["a","b","c","d","e"];
    var list = arr.slice(0);
    list[0] = 1;
    console.log(arr,list);
    
    var arr=["a","b","c","d","e"];
    var list = arr.concat();
    list[0] = 1;
    console.log(arr,list);
    
    var arr=["a","b","c","d","e"];
    var list = [];
    for(var i = 0,len = arr.length;i < len;i++){
        list.push(arr[i]);
    }
    list[0] = 1;
    console.log(arr,list);
    

    7、排

    (1)reverse();
        作用:逆序排列,将数组中的元素逆序存放,返回逆序后的数组,影响原数组。
        
        var arr = [100,20,30,3,34,14];
        console.log(arr.sort());//14,34,3,30,20,100
        console.log(arr);//14,34,3,30,20,100
    (2)sort(); 作用:数组中的元素按字符串比较,从小到大排列,返回排序都得数组,影响原数组。 var arr = [100,20,30,3,34,14]; console.log(arr.sort());//100,14,20,3,30,34 console.log(arr);//100,14,20,3,30,34

    sort(function(a,b){return a - b;})
      数组中的元素按数字比较从小到大排,返回排序后的数组,影响源数组.
      var arr = [100,20,30,3,34,14];
      console.log(arr.sort(function(a,b){return(a - b);}));//3,14,20,30,34,100
      console.log(arr);//3,14,20,30,34,100

    sort(function(a,b){return b - a;})
      数组中的元素按数字比较从大到小排,返回排序后的数组,影响源数组。 姓名排序可以用到。
      
    //从大到小
      var arr = [100,20,30,3,34,14];
      console.log(arr.sort(function(a,b){return(b - a);}));//100,34,30,20,14,3
      console.log(arr);//100,34,30,20,14,3
     
    
    

      

    8、转

    (1)toString():

      用于数组,将数组转为字符串,字符串以逗号分隔,返回字符串,不会影响源数组。 用于变量,将变量中的数字转为指定的进制。

     //用于数组
        var arr = [100,20,30,3,34,14];
        console.log(arr.toString());
        console.log(arr);
        
        //用于变量
        var num = 300;
        alert(num.toString(2));//将300转为2进制的字符串。
    

    (2)join(); 

      作用:将数组转为指定分隔符的字符串,返回转换后的字符串,不影响源数组

        var arr = [100,20,30,3,34,14];
        console.log(arr.join());
        console.log(arr);
    
        //join可以加参数,加什么参数就以什么分隔。
        var arr = [100,20,30,3,34,14];
        console.log(arr.join(""));//每个字符中间以空串分隔。
        console.log(arr);
        //字符串比较规则:从左到右依次比较。
    

      

    排序算法(冒泡、选择)

    冒泡排序:

    冒泡排序的思想:相邻的两个数比较,如果满足条件,交换两个数的位置。

    9 6 15 4 2
    第一种:
    从小到大第一轮比较:6 9 4 2 15//确认了最大值。
    第二轮比较:6 4 2 9 //又找到第二大的值
    第三轮比较:4 2 6
    第四轮比较:2 4
    即遍历出来的最大值不再参与下次遍历
    
    //第一种写法
    var arr = [9,6,15,4,2];
    for(var i = 1 ;i < arr.length;i++){//控制比较的轮数
        for(var j = 0;j < arr.length - i;j ++){//遍历数组,取出元素与后面的相比较
            if(arr[j] > arr[j + 1]){//改成小于则为从大到小
                var t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;
            }
        }
    }
    console.log(arr);
    
    第二种思想:
    9 6 15 4 2
    第一轮比较:2 9 6 15 4//求出最小值
    第二轮比较: 4 9 6 15
    第三轮比较: 6 9 15
    第四轮比较: 9 15
    
    var arr = [9,6,15,4,2];
    for(var i = 1;i < arr.length;i++){
        for(var j = arr.length;j >= i;j --){
            if(arr[j] < arr[j - 1]){
                var t = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = t;
            }
        }
     }
    

    选择排序

    选择思想:拿出一个数来,与其后面所有的数相比较。

    9 6 15 4 2 第一轮比较:6 9 15 4 2
    4 9 15 6 2
    2 9 15 6 4 //求出最小值
    第二轮比较:6 15 9 4
    4 15 9 6
    9 15 6 6 15 9
    9 15 则为2 4 6 9 15
    
    var arr = [9,6,15,4,2];
    //从第一个开始遍历,到length - 2
    for(var i = 0;i < length - 1;i++){
        //从i+ 1开始遍历,到length - 1
        for(var j = i + 1;j < arr.length; j++){
            if(arr[i]>arr[j]){
                var t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
                
            }
        }
    }
    

      

     
  • 相关阅读:
    UPC 5130 Concerts
    poj 1079 Calendar Game
    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛
    CF932E
    浅谈Tarjan算法
    拉格朗日差值
    扩展欧几里得算法(exgcd)
    欧拉定理
    莫比乌斯反演
    除法分块
  • 原文地址:https://www.cnblogs.com/cjm-0512/p/10057433.html
Copyright © 2020-2023  润新知