在JavaScript中创建任意长度的零填充数组最有效的方法是什么?
当前回答
我已经测试了IE 6/7/8、Firefox 3.5、Chrome和Opera中预分配/不预分配、向上/向下计数和for/while循环的所有组合。
下面的功能在Firefox、Chrome和IE8中始终是最快的或非常接近的,并且不比Opera和IE6中最快的慢太多。在我看来,这也是最简单明了的。我发现了几个while循环版本稍快的浏览器,所以我也将其包括在内以供参考。
function newFilledArray(length, val) {
var array = [];
for (var i = 0; i < length; i++) {
array[i] = val;
}
return array;
}
or
function newFilledArray(length, val) {
var array = [];
var i = 0;
while (i < length) {
array[i++] = val;
}
return array;
}
其他回答
这里还有一个不错的选择http://www.2ality.com/2013/11/initializing-arrays.html
function fillArrayWithNumbers(n) {
var arr = Array.apply(null, Array(n));
return arr.map(function (x, i) { return i });
}
我只使用:
var arr = [10];
for (var i=0; i<=arr.length;arr[i] = i, i++);
这里最快的是
(arr = []).length = len; arr.fill(0);
let arr = [...Array(100).fill(0)]
其他人似乎缺少的是预先设置数组的长度,这样解释器就不会不断改变数组的大小。
我的简单一行代码是Array.protocol.slice.apply(newUint8Array(长度))
但是,如果我要创建一个函数来快速执行,而不需要一些复杂的变通方法,我可能会编写一个这样的函数:
var filledArray = function(value, l) {
var i = 0, a = []; a.length = l;
while(i<l) a[i++] = value;
return a;
}