js中数组操作方法整理

发布于 2020-03-17  592 次阅读


常见方法,一看就会用的,就不代码去实现操作了,复杂的就demo一下。

1. join()

功能:将数组中所有元素都转化为字符串并连接在一起。

        var aa = [1,2,3,4,5,6];
        console.log(aa.join()); //1,2,3,4,5,6

2. reverse()

功能:将数组中的元素颠倒顺序。

        var aa = [1,2,3,4,5,6];
        console.log(aa.reverse()); //[6, 5, 4, 3, 2, 1]

3. concat()

功能:数组拼接的功能 ,返回新数组原数组不受影响

        var aa = [1,2,3,4,5,6];
        console.log(aa.concat(1+2)); //[1, 2, 3, 4, 5, 6, 3]
        console.log(aa.concat(1,2)); //[1, 2, 3, 4, 5, 6, 1, 2]
        console.log(aa.concat(aa)); //[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]
        console.log(aa);  //[1,2,3,4,5,6]  数组不会变化

4. slice()

截取数组生成新数组原数组不受影响
返回的数组包含第一个参数指定的位置和所有到但不含第二个参数指定位置之间的所有元素。如果为负数,表示相对于数组中最后一个元素的位置。如果只有一个参数,表示到数组末尾。

        var aa = [1,2,3,4,5,6];
        console.log(aa.slice(2)); //[3,4,5,6]
        console.log(aa.slice(2,8)); //[3,4,5,6] 超过最大长度,只显示到最后结果
        console.log(aa.slice(2,5)); //[3,4,5]
        console.log(aa.slice(2,-1)); //[3,4,5] 相对于倒数第一个之前
        console.log(aa.slice(2,-2)); //[3,4] 相对于倒数第二个之前
        console.log(aa.slice(3)); //[4,5,6] 一个参数从第三个到最后
        console.log(aa.slice(-2));//[5,6] 一个参数负值从倒数第二个到最后
        console.log(aa);  //[1,2,3,4,5,6]  数组不会变化

5. splice()

功能:从数组中删除元素、插入元素到数组中或者同时完成这两种操作。
输入:第一个参数为指定插入或删除的起始位置,第二个参数为要删除的个数。之后的参数表示需要插入到数组中的元素 。如果只有一个参数,默认删除参数后边的所有元素。
输出:返回一个由删除元素组成的数组。
注意:新建了一个数组,并修改了原数组

        var aa = [1,2,3,4,5,6];
        console.log(aa.splice(4)); //[5,6]  返回删除后的数组
        console.log(aa); // [1,2,3,4]
        console.log(aa.splice(2,2)); //[3,4] 从第二位起删除两个元素
        console.log(aa); //[1,2,5,6]
        console.log(aa.splice(1,0,7,8)); //[]从第一位起删除0个元素,添加7,8到原数组
        console.log(aa);//[1,7,8,2,5,6]

6. push()

在数组末尾添加一个或多个元素,并返回新数组长度

        var aa = [1,2,3,4,5,6];
        aa.push(1+2);
        console.log(aa.length); //  7
        console.log(aa);//[1, 2, 3, 4, 5, 6, 3]
        aa.push(1,2);
        console.log(aa.length); //  9
        console.log(aa);//[1, 2, 3, 4, 5, 6, 3, 1, 2]

这里有一个很有意思的现象

        var aa = [1,2];
        aa.push(aa); 
        console.log(aa);

打印出来是这样的

        (3) [1, 2, Array(3)]
            0: 1
            1: 2
                2: Array(3)
                0: 1
                1: 2
                    2: Array(3)
                    0: 1
                    1: 2
                        2: Array(3)
                        0: 1
                        1: 2
                            2: Array(3)
                            0: 1
                            1: 2
                                2: Array(3)
                                0: 1
                                1: 2
                                    2: Array(3)
                                    0: 1
                                    1: 2
                                    2: (3) [1, 2, Array(3)]
                                    length: 3
                                    __proto__: Array(0)
                                length: 3
                                __proto__: Array(0)
                            length: 3
                            __proto__: Array(0)
                        length: 3
                        __proto__: Array(0)
                    length: 3
                    __proto__: Array(0)
                length: 3
                __proto__: Array(0)
            length: 3
            __proto__: Array(0)

这是因为是数组的指向一直在循环,并不是push()方法一直在循环  实际数组就是  [ 1 , 2 , aa[] ]  ;

7. pop()

从数组末尾删除1个元素(删且只删除1个), 并返回被删除的元素

        var aa = [1,2,3,4,5,6];
        console.log(aa.pop());  // 6
        console.log(aa);  //[ 1 , 2 , 3 , 4 , 5]

8. shift()

在数组开始删除一个元素(删且只删除1个),并返回被删除的元素

        var aa = [2,2,3,4,5,6];
        console.log(aa.shift());  // 2
        console.log(aa);  //[ 2 , 3 , 4 , 5]

9. unshift()

在数组开始添加一个或多个元素,并返回新数组长度

        var aa = [1,2,3,4,5,6];
        console.log(aa.unshift(1,2,3));  // 9
        console.log(aa);  //[ 1 , 2 , 3 , 1 , 2 , 3 , 4 , 5]

10. toString()和toLocaleString()

将数组的每个元素转化为字符串,并且功能类似join()

11. indexOf()和lastIndexOf()  也可查找字符串

indexOf() 两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的开头(位置 0)开始向后查找。没找到返回-1. 返回查找项的索引值
lastIndexOf() 从数组的末尾开始向前查找。返回查找项的索引值(索引值永远是正序的索引值),没找到返回-1

        var aa = [2,2,3,4,5,6];
        console.log(aa.indexOf(2));  // 2
        console.log(aa.lastIndexOf(2));  //[ 2 , 3 , 4 , 5]

在数学中高阶函数听起来很大上,JavaScript中也有的,其实就是把一个函数作为另一个函数的参数,不要被高阶吓到了,下边几种数组方法都属于此。

A. sort();

默认情况下sort()方法没有传比较函数的话,默认按字母升序,如果不是元素不是字符串的话,会调用toString()方法将元素转化为字符串的Unicode(万国码)位点,然后再比较字符。所以用默认方法排序数据是有问题的。

        var arr = [20,10,2,1,3];
        arr.sort();// [1, 10, 2, 20, 3]
        arr.sort(function(a,b){
        return a-b;    //升序
        }); //[1, 2, 3, 10, 20]
        arr.sort(function(a,b){
        return b-a;    //降序
        }); //[20,10,3,2,1]

B. forEach()

从头至尾遍历数组,为每个元素调用指定函数
输入为一个待遍历函数,函数的参数依次为:数组元素、元素的索引、数组本身

只能循环遍历 数组   对象和伪数组不能使用
        var arr = [1, 2, 3, 4, 5];
        arr.forEach(function (item,index,arr) {
            if (item === 3) {
                return;  // 不能为 return false
            }
            console.log(index+'...'+item+'...'+arr);
            // 0..1...数组
            // 1..2...数组
            // 3..4...数组
            // 4..5...数组
        });

C. for in()

从头至尾遍历数组,为每个元素调用指定函数
index中以字符串的形式,存储索引下标

是可以循环数组,可以循环对象,循环伪数组的语法形式
        var arr = ['北京','上海','广州','重庆','天津','成都','桂林','香港','澳门','台湾'];
        for(var index in arr){
            console.log(index);

            // 只会改变 当前循环 index 中存储的数值
            // 对循环的次数和循环的执行,没有任何的影响
            if( index === '5' ){
                index = arr.length-1;
            }

            console.log( arr[index] );
        }

D. map()

 

调用的数组的每一个元素传递给指定的函数,并返回一个新数组 ,不修改原数组。

 

        var arr = [2,3,4,5,6];
        var bb= arr.map(function(x){
            return x*x;
        });
        console.log(bb); // [4, 9, 16, 25, 36]
        console.log(arr); // [2, 3, 4, 5, 6]

E. filter()

过滤功能,数组中的每一项运行给定函数,返回满足过滤条件组成的数组。
可以巧妙的用来去重

        var a = [1,2,3,4,5,6,3,1];
        var b=a.filter(function(v,i,self){
            return self.indexOf(v) == i;
        });
        console.log(b);  //[1, 2, 3, 4, 5, 6]
        console.log(a);  //[1, 2, 3, 4, 5, 6 ,3 ,1]

F. every()和some()

every() 判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。
some() 判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true。

        var arr = [1, 2, 3, 4, 5, 6];
        arr.every(x=>x>0);//return true;
        arr.every(x=>x>5);//return false;
        arr.some(x=>x>5);//return true;

G. reduce()和reduceRight()

reduce() 两个参数:函数和递归的初始值。从数组的第一项开始,逐个遍历到最后
reduceRight() 方法的功能和 reduce() 功能是一样的,不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加。

reduce()和reduceRight()对于空数组是不会执行回调函数的

        //可以用reduce快速求数组之和
        var arr=[1,2,3,4,5];
        var b=arr.reduce(function num(total,value,index,arr){
            console.log(total,value,index,arr);  //计算结束后的返回值 , 当前元素 ,当前元素的索引, 当前元素所属的数组对象
            return total+value;
        },1); //初始值
        console.log(b)  //16

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。