在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;
    }

其他回答

虽然这是一个旧线程,但我想添加我的2美分。不知道这有多慢/快,但它是一个快速的单线。以下是我所做的:

如果我想预先填写数字:

Array.apply(null, Array(5)).map(Number.prototype.valueOf,0);
// [0, 0, 0, 0, 0]

如果我想预先填充字符串:

Array.apply(null, Array(3)).map(String.prototype.valueOf,"hi")
// ["hi", "hi", "hi"]

其他答案表明:

new Array(5+1).join('0').split('')
// ["0", "0", "0", "0", "0"]

但如果您想要0(数字)而不是“0”(字符串中为零),则可以执行以下操作:

new Array(5+1).join('0').split('').map(parseFloat)
// [0, 0, 0, 0, 0]
function makeArrayOf(value, length) {
  var arr = [], i = length;
  while (i--) {
    arr[i] = value;
  }
  return arr;
}

makeArrayOf(0, 5); // [0, 0, 0, 0, 0]

makeArrayOf('x', 3); // ['x', 'x', 'x']

注意while通常比in、forEach等更有效。

ES6溶液:

[...new Array(5)].map(x => 0); // [0, 0, 0, 0, 0]

const arr=数组.from({长度:10}).fill(0);控制台日志(arr)

我只使用:

var arr = [10];
for (var i=0; i<=arr.length;arr[i] = i, i++);