本文并没有详细列出Array方法详解,本文侧重点在于使用Array编程时候要注意的问题。
1.Array.concat
var o = {name:"Gavin"}; var a1 = [1,2,3]; var a2 = [6,o]; var arr1 = a1.concat(a2); a1[0] = 0; o.name = "GavinPan"; console.log(arr1);//[ 1, 2, 3, 6, {name:"GavinPan"} ]
concat 将两个数组浅拷贝连接
2.Array.join
var o2 = {name:"Gavin"}; var arr2 = ['a', 1, o2]; var str2 = arr2.join(''); console.log(str2);//a1[object Object]
join 会把数组的每一项变成字符串,再把数组变成字符串。
在IE6、7的时代使用jion去连接大量字符串要优于使用+号,目前建议使用+号连接,参考《高性能网站进阶指南》中字符串优化
3. Array.pop Array.push
可以这样实现,只是提供一种思路
// Array.method('pop', function () {
// return this.splice(this.length-1,1)[0];
// });
// Array.method('pop', function () {
// this.splice.apply(
// this, [this.length, 0].concat(Array.prototype.slice.apply(arguments))
// );
// return this.length;
// });
4. Array.reverse
var arr4 = [1,2,3]; var a4 = arr4.reverse(); arr4[2] = 'reverse'; console.log(arr4); //Array(3) [ 3, 2, "reverse" ] console.log(a4); //Array(3) [ 3, 2, "reverse" ]
reverse 将数组翻转,返回数组本身。arr4 与 a4 是一个数组。
5. Array.shift
移除数组第一项,比Array.pop要慢的多
6.Array.slice(start, end)
对数组的一段做浅拷贝,end省略表示一直到最后
7.Array.sort
数组排序,会把元素视为字符串,不靠谱,建议自己写。
8.Array.splice(index, count, item...)
var arr8 = [1,2,3]; var a8 = arr8.splice(1, 1,'a','b'); console.log(arr8); //[ 1, "a", "b", 3 ] console.log(a8); //[ 2 ]
splice 从index索引位置删除count个数的项,返回数组删除项。如果item不为空将在index索引位置添加item项。注意不要混淆slice,slice是浅拷贝一段数组。
9.Array.unshif
//把元素添加到数组的第一项
// Array.method('unshif', function(){
// this.splice.applay(this, [0 ,0].concat(Array.prototype.slice.apply(arguments)));
// return this.length;
// });
Array.prototype.unshif1 = function(){ console.log(`----`) console.log(Array.prototype.slice.apply(arguments)); this.splice.apply(this, [0 ,0].concat(Array.prototype.slice.apply(arguments))); return this.length; }; var arr9 = [1,2,3,4]; arr9.unshif1('a','b'); console.log(arr9)
有关slice填坑,w3cschool arrayObject.slice(start,end) start 必需,但是以下结果是对的。MND中给的答案正确 arr.slice([begin[, end]]),slice可以什么参数都不传。
var arrtest = [1,2,3]; var arrtest1 = arrtest.slice(); console.log(arrtest1);
扩展解释
Array.prototype.slice.apply(arguments),这么写的原因是,arguments 是类似数组的对象,他不是数组,所以不能使用数组的方法slice,通过apply去调用数组的slice方法,结果返回数组。
arr9.unshif1('a','b'); 可以看做 arr9.splice(0, 0, 'a', 'b');