数组的常用方法

1.数组的添加和删除

push()pop()

  这两个方法的功能与以前学的出栈和入栈方法是一样的,都是在原数组中操作的,并非生成一个修改后的新数组。push()在数组的尾部添加一个或多个元素,并返回数组新的长度;pop()删除数组的最后一个元素,减少数组长度并返回删除的值。

 

unshift()shift():

  类似于push()和pop(),只不过它们是在数组的头部进行添加和删除操作。unshift()是在数组头部添加一个或多个元素(将已存在的其他元素移动到更高索引的位置),返回数组的新长度;shift()则是删除数组的第一个元素并将其返回(删除后数组的其他元素会下移一个位置填充数组头部的空缺)。注意,使用unshift()一次性插入多个元素与多次调用unshift()插入多个元素的表现是不一样的,如下所示:

var a=[];
a.unshift(1);
a.unshift(2);
alert(a.toString());//a=[2,1]
a.unshift(3,4);
alert(a.toString());//a=[3,4,2,1],并非是像前面那样一个一个向头部插入
delete a[0];
alert(a.toString());//a=[,4,2,1],使用delete删除元素只是将该位置元素置为undefined,并不是从数组中移除

  在这里可以看到,使用delete删除数组元素并不会改数组的length属性,也不会将元素从高索引处下移来填充空缺位。这样,使用delete删除元素会使得数组变成稀疏数组

 

splice():

  该方法是在数组中插入或删除元素的通用方法,它会修改原数组的元素,并非是创建一个修改后的新数组。splice()有多个参数,功能如下:

  • 第一个参数:指定了插入和(或)删除的起始位置
  • 第二个参数:指定了要删除的元素个数
  • 随后任意多个参数:指定了需要插入的元素

  因此,根据提供参数的个数,splice()方法有多个实现功能:

  • 若仅提供了一个参数splice(a),splice()执行的是删除操作,表示从参数指定的起始位a开始到数组末尾的所有元素都将被删除;
  • 若提供了两个参数splice(a,b),仍是删除操作,表示从第一个参数指定的起始位a开始,删除b个元素;
  • 若提供两个以上参数,splice()会同时完成删除和插入操作(如果将第二个参数设为0,则只执行插入操作)。
    var a=[1,2,3,4,5,6,7,8];
    var n1=a.splice(4);//n1=[5,6,7,8],a=[1,2,3,4]
    var n2=a.splice(1,2);//n2=[2,3],a=[1,4]
    var n3=a.splice(1,0,'a','b');//n3=[],a=[1,'a','b',4]
    var n4=a.splice(1,2,[1,2],3);//n4=['a','b'],a=[1,[1,2],3,4]

 

concat():

  该方法用于在数组后面拼接新的元素,所要添加的元素作为参数传递到concat()方法中,这个方法不会修改原数组,返回的是新创建的拼接后的数组。值得注意的是:若参数包含数组,则拼接进来的是参数数组的元素,而不是将整个数组作为一个整体拼接进来,但它又不会递归扁平化数组的数组(也即作为参数的数组内部若还嵌套着数组,此时该嵌套的数组将作为一个整体拼接进来)。

var a=[1,2,3];
a.concat(4,5); //返回[1,2,3,4,5]
a.concat([4,5]);//返回[1,2,3,4,5]
a.concat([4,5],[6,[7,8]]);//返回[1,2,3,4,5,6,[7,8]],length=7

 

2.数组转换为字符串输出

join():

  该方法将数组中所有元素都转换为字符串并连接在一起,返回最后生成的字符串。它可以接收一个字符串参数用来作为分隔符,若不指定分隔符则默认使用逗号。

toString():

  与不使用任何参数调用join()方法返回的字符串是一样的。 

var a=[1,2,3];
a.join();// 输出"1,2,3"
a.join(" "); //输出"1 2 3"
a.toString(); //输出"1,2,3"

 

 

3.数组排序

reverse():

  该方法将数组中元素的顺序颠倒,返回逆序的数组。它在原数组的基础上改变,并非创建新的逆序后的数组。

sort():

  该方法将数组中的元素按字母表顺序排序并返回排序后的数组。同样,它也是在原数组的基础上进行更改。若想要按照其他方式进行排序,则可以向sort()方法传递一个比较函数。

var a=[33,4,1111,222];
a.sort(); //返回[1111,222,33,4],并非是我们以为的按数值大小排序
a.sort(function(a,b){     //按数值从小到大排序
            return a-b;
        });
a.sort(function(a,b){    //按数值从大到小排序
            return b-a;
        });        

 

上一篇:如何解决一个数组添加进另一个数组中无法被循环获取


下一篇:js删除数组中指定元素以及清空数组