如何创建任意长度的零填充JavaScript数组?

时间:2013-11-26 16:25:16

标签: javascript

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

8 个答案:

答案 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)

默认情况下Uint8ArrayUint16ArrayUint32Array类保留零作为值,因此您不需要任何复杂的填充技术,只需:

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