代码
var cool = new Array(3);
cool[setAll] = 42; //cool[setAll] is just a pseudo selector..
alert(cool);
结果
警告信息:
42,42,42
如何将数组的所有值更改/设置为特定值?
答案 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.prototype
和Array.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)
因此,基本上20
是length
或新实例化的Array
。
答案 7 :(得分:0)
在与Epicycles一起工作时发现了这一点-很明显-我看不到'p'。
sleep