在JavaScript中创建任意长度的零填充数组最有效的方法是什么?


当前回答

其他人似乎缺少的是预先设置数组的长度,这样解释器就不会不断改变数组的大小。

我的简单一行代码是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;
    }

其他回答

这里还有一个不错的选择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 });
}

其他人似乎缺少的是预先设置数组的长度,这样解释器就不会不断改变数组的大小。

我的简单一行代码是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;
    }
const item = 0
const arr = Array.from({length: 10}, () => item)

常量项=0constarr=Array.from({length:42},()=>项)控制台日志('arr',arr)

ES6引入了Array.prototype.fill。它可以这样使用:

new Array(len).fill(0);

不确定它是否很快,但我喜欢它,因为它很短,很自我描述。

它仍然不在IE中(检查兼容性),但有一个polyfill可用。

我没有反对:

Array.apply(null, Array(5)).map(Number.prototype.valueOf,0);
new Array(5+1).join('0').split('').map(parseFloat);

Zertosh建议,但在一个新的ES6阵列扩展中,您可以使用fill方法在本地执行此操作。现在IE edge、Chrome和FF都支持它,但请查看兼容性表

new Array(3).fill(0)将为您提供[0,0,0]。您可以用任何值填充数组,如new array(5).fill('abc')(甚至对象和其他数组)。

除此之外,您还可以使用填充修改以前的阵列:

arr = [1, 2, 3, 4, 5, 6]
arr.fill(9, 3, 5)  # what to fill, start, end

这给了你:[1,2,3,9,9,6]