在JavaScript中创建任意长度的零填充数组最有效的方法是什么?
当前回答
在我的测试中,这是我电脑中最快的
1亿个元素需要大约350毫秒。
"0".repeat(100000000).split('');
对于相同数量的元素,map(()=>0)需要大约7000毫秒,这是一个巨大的差异
其他回答
使用对象表示法
var x = [];
零填充?喜欢
var x = [0,0,0,0,0,0];
填充了“undefined”。。。
var x = new Array(7);
带零的obj符号
var x = [];
for (var i = 0; i < 10; i++) x[i] = 0;
作为补充说明,如果修改Array的原型
var x = new Array();
and
var y = [];
将对原型进行修改
无论如何,我不会过分关注这个操作的效率或速度,你可能会做很多其他事情,这些事情比安装一个包含零的任意长度数组更浪费和昂贵。
最快的方法是使用forEach=)
(我们保持IE<9的向后兼容性)
var fillArray = Array.prototype.forEach
? function(arr, n) {
arr.forEach(function(_, index) { arr[index] = n; });
return arr;
}
: function(arr, n) {
var len = arr.length;
arr.length = 0;
while(len--) arr.push(n);
return arr;
};
// test
fillArray([1,2,3], 'X'); // => ['X', 'X', 'X']
我只使用:
var arr = [10];
for (var i=0; i<=arr.length;arr[i] = i, i++);
如果使用ES6,则可以像这样使用Array.from():
Array.from({ length: 3 }, () => 0);
//[0, 0, 0]
结果与相同
Array.from({ length: 3 }).map(() => 0)
//[0, 0, 0]
因为
Array.from({ length: 3 })
//[undefined, undefined, undefined]
洛达什:
_.fill(array, value)
是一种干净且跨浏览器安全的填充数组的方法。