Javascript |设置数组的所有值

时间:2011-04-27 10:41:03

标签: javascript arrays

代码

var cool = new Array(3);
cool[setAll] = 42; //cool[setAll] is just a pseudo selector..
alert(cool);

结果

警告信息:

42,42,42

如何将数组的所有值更改/设置为特定值?

8 个答案:

答案 0 :(得分:45)

没有内置方式,你必须遍历所有这些方式:

function setAll(a, v) {
    var i, n = a.length;
    for (i = 0; i < n; ++i) {
        a[i] = v;
    }
}

http://jsfiddle.net/alnitak/xG88A/

如果确实想要,请执行以下操作:

Array.prototype.setAll = function(v) {
    var i, n = this.length;
    for (i = 0; i < n; ++i) {
        this[i] = v;
    }
};

然后你实际上可以cool.setAll(42)(见http://jsfiddle.net/alnitak/ee3hb/)。

有些人不屑于扩展内置类型的原型。

编辑 ES5介绍了一种安全地扩展Object.prototypeArray.prototype而不会破坏for ... in ...枚举的方法:

Object.defineProperty(Array.prototype, 'setAll', {
    value: function(v) {
        ...
    }
});

编辑2 在ES6草案中,现在还Array.prototype.fill,使用cool.fill(42)

答案 1 :(得分:21)

ES6方法非常干净。首先,初始化一个x长度的数组,然后在其上调用fill方法。

let arr = new Array(3).fill(9)

这将创建一个包含3个元素的数组,如:

[9, 9, 9]

答案 2 :(得分:19)

map是解决此问题的最合理解决方案。

let xs = [1, 2, 3];
xs = xs.map(x => 42);
xs // -> [42, 42, 42]

但是,如果阵列有可能稀疏,则需要使用for或更好的for .. of

请参阅:

答案 3 :(得分:3)

使用for循环并依次设置每个循环。

答案 4 :(得分:1)

其他答案都很好,但是while循环似乎更合适:

function setAll(array, value) {
  var i = array.length;
  while (i--) {
    array[i] = value;
  }
}

更具创意的版本:

function replaceAll(array, value) {
  var re = new RegExp(value, 'g');
  return new Array(++array.length).toString().replace(/,/g, value).match(re);
}

虽然可能无处不在。 : - )

答案 5 :(得分:1)

实际上,您可以使用这种完美的方法:

let arr = Array.apply(null, Array(5)).map(() => 0);
// [0, 0, 0, 0, 0]

此代码将创建数组并用零填充。 或者只是:

let arr = new Array(5).fill(0)

答案 6 :(得分:1)

现在是2019年,您应该使用此功能:

let arr = [...Array(20)].fill(10)

因此,基本上20length或新实例化的Array

答案 7 :(得分:0)

在与Epicycles一起工作时发现了这一点-很明显-我看不到'p'。

sleep