在JavaScript中创建任意长度的零填充数组最有效的方法是什么?
当前回答
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]
新的Array(51).join(“0”).split(“”)怎么样?
如果使用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]
创建全新阵列
new Array(arrayLength).fill(0);
在现有阵列的末尾添加一些值
[…existingArray,…new Array(numberOfElementsToAdd).fill(0)]
实例
//**创建全新阵列**console.log(新数组(5).fill(0));//**在现有阵列的末尾添加一些值**让existingArray=[1,2,3]console.log([…existingArray,…new Array(5).fill(0)]);
匿名函数:
(function(n) { while(n-- && this.push(0)); return this; }).call([], 5);
// => [0, 0, 0, 0, 0]
用for循环稍微短一点:
(function(n) { for(;n--;this.push(0)); return this; }).call([], 5);
// => [0, 0, 0, 0, 0]
适用于任何对象,只需更改this.push()中的内容即可。
您甚至可以保存函数:
function fill(size, content) {
for(;size--;this.push(content));
return this;
}
使用以下方法调用:
var helloArray = fill.call([], 5, 'hello');
// => ['hello', 'hello', 'hello', 'hello', 'hello']
将元素添加到已存在的数组:
var helloWorldArray = fill.call(helloArray, 5, 'world');
// => ['hello', 'hello', 'hello', 'hello', 'hello', 'world', 'world', 'world', 'world', 'world']
性能:http://jsperf.com/zero-filled-array-creation/25