JavaScript: sparse arrays vs. dense arrays
image.png
1、Sparse arrays 稀疏数组
稀疏数组,简单来说,就是数组元素的个数,跟数组长度不一致
image.png
当我们循环这个数组时, 就像黑洞
image.png
关于<权威指南>p147的错误
var a1 = [,,,];//数组是[undefined,undefined,undefined] == > 这里是 错误的,应该是都是empty
var a2 = new Array(3);
0 in a1 //true:a1在索引0处有一个元素。 ==> 这里应该是false
0 in a2 //false
image.png
2、Dense arrays 稠密数组
我们可以使用这个小技巧来创建稠密数组
这个和我们这样是等价的
Array(undefined, undefined, undefined)
大都数情况下,稀疏数组和稠密数组没啥区别,除了在循环上
image.png
3、快速创建若干个稠密数组
Array.apply(null, Array(3)).map(Function.prototype.call.bind(Number))
Array.apply(null, Array(99)).map(function(x,i){ return Number.call(x,i)})
4、实际中的快速创建稠密数组,使用 underscore
_.range(3) // [ 0, 1, 2 ]
_.range(3).map(function () { return "a" }) // [ 'a', 'a', 'a' ]
underscorerange方法实现
_.range = function(start, stop, step) {
if (stop == null) {
stop = start || 0;
start = 0;
}
if (!step) {
step = stop < start ? -1 : 1;
}
var length = Math.max(Math.ceil((stop - start) / step), 0);
var range = Array(length);
for (var idx = 0; idx < length; idx++, start += step) {
range[idx] = start;
}
return range;
};
参考
- JavaScript: sparse arrays vs. dense arrays
- JavaScript权威指南,
网友评论