var a = []; console.log(a,a.push(1));//[1] 1 console.log(a,a.push('a'));//[1,'a'] 2 console.log(a,a.push(true, {}));//[1,'a',true,{}] 4 console.log(a,a.push([5,6]));//[1,'a',true,{},[5,6]] 5
如果需要合并两个数组,可以使用apply方法
var a = [1, 2, 3]; var b = [4, 5, 6]; console.log(a,Array.prototype.push.apply(a, b));//[1,2,3,4,5,6] 6
[注意]如果使用call方法,则会把数组b整体看成一个参数
var a = [1, 2, 3]; var b = [4, 5, 6]; console.log(a,Array.prototype.push.call(a, b));//[1,2,3,[4,5,6]] 4
push()方法也可以向对象中添加元素,添加后的对象变成类数组对象,即新加入元素的键对应数组的索引,并且对象有一个length属性
var obj = {a: 1}; console.log(obj,[].push.call(obj, 2));// {a:1, 0:2, length: 1} console.log(obj,[].push.call(obj, [3]));// {a:1, 0:2, 1:[3], length: 2}
【pop()】
pop()方法从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。所以,该数组会改变原数组
var a = ['a', 'b', 'c']; console.log(a,a.pop()); // ['a', 'b'] 'c'
对空数组使用pop()方法,不会报错,而是返回undefined
var a = []; console.log(a,a.pop()); // [] undefined
【shift()】
shift()方法移除数组中的第一个项并返回该项,同时数组的长度减1。所以,该数组会改变原数组
var a = ['a', 'b', 'c']; console.log(a,a.shift());//['b', 'c'] 'a'
对空数组使用shift()方法,不会报错,而是返回undefined
var a = []; console.log(a,a.shift());// [] undefined
【unshift()】
unshift()方法在数组前端添加任意个项并返回新数组长度。所以,该数组会改变原数组
var a = ['a', 'b', 'c']; console.log(a,a.unshift('x')); //['x', 'a', 'b', 'c'] 4
当使用多个参数调用unshift()时,参数是一次性插入的而非一次一个地插入。这意味着最终的数组中插入的元素的顺序和它们在参数列表中的顺序一致
var a = ['a', 'b', 'c']; console.log(a,a.unshift('x','y','z')); //['x','y','z','a', 'b', 'c'] 6
[注意]在IE7-浏览器中,unshift()方法返回的总是undefined
//标准浏览器下,返回[1] 1;而IE7-浏览器下,返回[1] undefined var a = []; console.log(a,a.unshift(1));
数组排序方法
数组中存在两个可以直接用来重排序的方法: reverse()和sort()
【reverse()】
reverse()方法用于反转数组的顺序,返回经过排序之后的数组;而原数组顺序也发生改变
var array = [1,2,4,3,5]; console.log(array,array.reverse());//[5,3,4,2,1] [5,3,4,2,1] var array = ['str',true,3]; console.log(array,array.reverse());//[3,true,'str'] [3,true,'str']
【sort()】
默认情况下,sort()方法按字符串升序排列数组项,sort方法会调用每个数组项的toString()方法,然后比较得到的字符串排序,返回经过排序之后的数组,而原数组顺序也发生改变
var array = [1,2,4,3,5]; console.log(array,array.sort());//[1,2,3,4,5] [1,2,3,4,5] var array = ['3str',3,2,'2']; console.log(array,array.sort());//[2, "2", 3, "3str"] [2, "2", 3, "3str"] var array = [1,5,10,50]; console.log(array,array.sort());//[1, 10, 5, 50] [1, 10, 5, 50]
如果数组包含undefined元素,它们会被排到数组的尾部
var array = ['3',3,undefined,2,'2']; console.log(array,array.sort());//["2", 2, "3", 3, undefined] ["2", 2, "3", 3, undefined]
sort()方法可以接受一个比较函数作为参数,以便指定哪个值在哪个值的前面。比较函数接收两个参数,如果第一个参数应该位于第二个参数之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个参数之后则返回一个正数
function compare(value1,value2){ if(value1 < value2){ return -1; }else if(value1 > value2){ return 1; }else{ return 0; } } var array = ['5px',50,1,10]; //当数字与字符串比较大小时,字符串'5px'会被转换成NaN,这样结果就是false console.log(array.sort(compare));//["5px",1, 10, 50]
对于数值类型或valueOf()方法会返回数值类型的对象类型,比较函数可以简化
function compare(value1,value2){ return value1 - value2; } var array = ['5px',50,1,10]; console.log(array.sort(compare));//["5px",1,10,50] var array = [5,50,1,10]; console.log(array.sort(compare));//[1,5,10,50]
如果对一个字符串数组执行不区分大小写的字母表排序,比较函数首先将参数转化为小写字符串再开始比较