创建任意长度的零填充JavaScript数组的最有效方法是什么?
答案 0 :(得分:18)
怎么样这样:
Array.apply(null, new Array(10)).map(Number.prototype.valueOf,0);
//Output as [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
或
new Array(10+1).join('0').split('').map(parseFloat)
//Output as [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
修改: - 强>
如果你的数组是动态的,那么只需将它放在一个带有数字的函数中,并用该变量替换10。
答案 1 :(得分:17)
默认情况下Uint8Array
,Uint16Array
和Uint32Array
类保留零作为值,因此您不需要任何复杂的填充技术,只需:
var ary = new Uint8Array(10);
默认情况下,数组ary
的所有元素都将为零。
答案 2 :(得分:14)
新的ES6数组扩展允许您使用fill
方法本机执行此操作。现在IE边缘,Chrome和FF支持它,但检查compatibility table
new Array(3).fill(0)
会给你[0, 0, 0]
。您可以使用任何值填充数组,例如new Array(5).fill('abc')
(甚至是对象和其他数组)。
最重要的是,您可以使用fill修改以前的数组:
arr = [1, 2, 3, 4, 5, 6]
arr.fill(9, 3, 5) # what to fill, start, end
为您提供:[1, 2, 3, 9, 9, 6]
答案 3 :(得分:7)
如果你想要一个9长的阵列:
Array.apply(null, {length: 9}).map(function() {return 0;})
如果你想要一个X长度数组:
Array.apply(null, {length: X}).map(function() {return 0;})
如果你有一个数组并想要重写它的值:
var arr=[54,53,6,7,88,76]
arr=arr.map(function() {return 0;})
您只需更改 .map 内功能内返回的值,即可为所需数据填充数组:
Array.apply(null, {length: 9}).map(function() {return "a string";})
Array.apply(null, {length: 9}).map(function() {return Math.random();})
Array.apply(null, {length: 9}).map(function() {return NaN;})
Array.apply(null, {length: 9}).map(function() {return null;})
Array.apply(null, {length: 9}).map(function() {return true;})
Array.apply(null, {length: 9}).map(function() {return;})
最后一个将使用 undefined
填充数组答案 4 :(得分:7)
在Javascript ES6中有一个非常简单的解决方案。我来到这里是因为我试图缩短它的代码:
n = 999 // arbitrary length
a = Array(n).fill(0)
console.log(a)

答案 5 :(得分:6)
function repeatArray(value, len){
var A=[],i=0;
while (i<len) A[i++]= value;
return A;
}
答案 6 :(得分:2)
我测试了Unit8Array
[].slice.apply(new Uint8Array(n));
和加入/拆分方法
new Array(n + 1).join('0').split('').map(parseFloat);
jsPerf中的,结果很有趣。 Chrome和Firefox在这两方面都相当缓慢(48,000到76,000次操作)。但是Opera和Safari在Uint8Array功能方面表现都非常出色(最多438,000次操作)。我想我会开始使用Uint8Array,希望Chrome和Firefox改进。
答案 7 :(得分:1)
一种方法可以使用递归。
function fillArray(l, a) {
a = a || [];
if (0 < l) {
l -= 1;
a[l] = 0;
return fillArray(l, a);
}
return a;
}
我还发布了一个更经典的选项:
function fillArray(l) {
var a;
for (a = []; 0 < l; l-=1, a[l]=0);
return a;
}