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


当前回答

默认情况下,Uint8Array、Uint16Array和Uint32Array类的值保持为零,因此不需要任何复杂的填充技术,只需执行以下操作:

var ary = new Uint8Array(10);

默认情况下,数组ary的所有元素都将为零。

其他回答

let arr = [...Array(100).fill(0)]

虽然这是一个旧线程,但我想添加我的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]

在答案中没有看到这种方法,所以这里是:

"0".repeat( 200 ).split("").map( parseFloat )

结果,您将得到长度为200的零值数组:

[ 0, 0, 0, 0, ... 0 ]

我不确定这段代码的性能,但如果您将它用于相对较小的阵列,这应该不是问题。

递归解决方案

正如其他人所指出的,利用.contat()通常提供快速解决方案。下面是一个简单的递归解决方案:

函数zeroFill(len,a){return len<=(a||(a=[0])).长度?a.切片(0,len):zeroFill(长度,a.concat(a))}console.log(zeroFill(5));

以及一个通用递归数组填充函数:

函数填充(len,v){返回长度<=(v=[].contat(v,v)).length?v.slice(0,len):填充(len,v)}console.log(fill(5,'abc'));

let filled=[];填充长度=10;fill.fill(0);console.log(已填充);