在JavaScript中创建任意长度的零填充数组最有效的方法是什么?
当前回答
新的Array(51).join(“0”).split(“”)怎么样?
其他回答
新的Array(51).join(“0”).split(“”)怎么样?
截至ECMAScript2016,大型阵列有一个明确的选择。
由于这一答案在谷歌搜索中仍然排名靠前,所以这里有一个2017年的答案。
这里有一个当前的jsbench,其中有几十种流行的方法,包括迄今为止提出的许多方法。如果你找到更好的方法,请添加、分叉和分享。
我想指出,没有真正最有效的方法来创建任意长度的零填充数组。您可以优化速度,也可以优化清晰度和可维护性——根据项目的需要,两者都可以被视为更有效的选择。
在优化速度时,您需要:使用文字语法创建数组;设置长度,初始化迭代变量,并使用while循环遍历数组。这里有一个例子。
常量arr=[];arr.length=120000;设i=0;而(i<120000){arr[i]=0;i++;}
另一种可能的实施方式是:
(arr = []).length = n;
let i = 0;
while (i < n) {
arr[i] = 0;
i++;
}
但我强烈反对在实践中使用第二次植入,因为它不太清楚,也不允许在数组变量上保持块范围。
这比用for循环填充要快得多,比标准方法快90%左右
const arr = Array(n).fill(0);
但这种填充方法由于其清晰、简洁和可维护性,对于较小的阵列来说仍然是最有效的选择。除非您制作了大量长度为数千或更多的阵列,否则性能差异可能不会让您丧命。
其他一些重要的注意事项。大多数风格指南都建议您在使用ES6或更高版本时,如果没有非常特殊的原因,不要再使用var。对于不会被重新定义的变量使用const,对于会被重新定义变量使用let。MDN和Airbnb的风格指南是获取更多最佳实践信息的好地方。这些问题并不涉及语法,但重要的是,在搜索大量新旧答案时,熟悉JS的人必须了解这些新标准。
const item = 0
const arr = Array.from({length: 10}, () => item)
常量项=0constarr=Array.from({length:42},()=>项)控制台日志('arr',arr)
我只使用:
var arr = [10];
for (var i=0; i<=arr.length;arr[i] = i, i++);
其他人似乎缺少的是预先设置数组的长度,这样解释器就不会不断改变数组的大小。
我的简单一行代码是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;
}