多读书,多运动,多到远处走走,再看看不一样的世界。
concat(..)
var c = a.concat( b );
a = b = null; // 回收a、b
缺陷:
push(..) || unshift(..)
for (var i=0; i < b.length; i++) {
a.push( b[i] );
}
b = null;
缺陷:
reduce
a = b.reduce( function(coll,item){
coll.push( item );
return coll;
}, a );
apply
a.push.apply( a, b );
...
a.push( ...b )
缺陷:
创建一个指定长度的稀疏数组:
var arr = new Array(3);
console.log(arr)
console.log(arr.length)
console.log(arr[0])
==> [ , , ]
==> 3
==> undefined
并且 JavaScript 在遍历稀疏数组时会跳过这些缝隙:
var arr = new Array(3);
arr.forEach(function (item, i) {
console.log(i+": "+item);
});
==> undefined
arr.map(function (item, i) {
return i;
})
==> [ , , ]
还有一些其他情况会生成稀疏数组,比如
var arr = [];
arr[0] = 0;
arr[100] = 100;
arr.forEach(function (item, i) {
console.log(i+": "+item);
});
==> 0: 0
==> 100: 100
>
创建一个密集数组:
var arr = Array.apply(null, Array(3));
console.log(arr);
console.log(arr.length);
console.log(arr[0]);
==> [ undefined, undefined, undefined ]
==> 3
==> undefined
从表面上看,貌似这个数组和之前的稀疏数组并没有太多的区别,但是密集数组可以遍历到这些数组元素,还可以为每个元素重新赋值:
var arr = Array.apply(null, Array(3));
arr.forEach(function (item, i) {
console.log(i+": "+item);
});
==> 0: undefined
1: undefined
2: undefined
arr.map(function (item, i) {
return i;
})
==> [ 0, 1, 2 ]
Array.apply(null, Array(3)).map(Function.prototype.call.bind(Number));
==> [ 0, 1, 2 ]
等同于下面的写法
Array.apply(null, Array(3)).map(Function.prototype.call,Number)
使用自定义的函数更清晰,但自定义的函数肯定没有原生方法快
var arr = ["aaa ", " bbb", " ccc "];
arr.map(function(item) {
return item.trim();
});
==> ["aaa", "bbb", "ccc"]
arr.map(Function.prototype.call, String.prototype.trim);
==> ["aaa", "bbb", "ccc"]