Tom*_*kay 32 javascript arrays
码
var cool = new Array(3);
cool[setAll] = 42; //cool[setAll] is just a pseudo selector..
alert(cool);
Run Code Online (Sandbox Code Playgroud)
结果
提醒消息:
42,42,42
Run Code Online (Sandbox Code Playgroud)
如何将数组的所有值更改/设置为特定值?
Aln*_*tak 48
没有内置方式,你必须遍历所有这些:
function setAll(a, v) {
var i, n = a.length;
for (i = 0; i < n; ++i) {
a[i] = v;
}
}
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/alnitak/xG88A/
如果你真的想要,请这样做:
Array.prototype.setAll = function(v) {
var i, n = this.length;
for (i = 0; i < n; ++i) {
this[i] = v;
}
};
Run Code Online (Sandbox Code Playgroud)
然后你可以真正做到cool.setAll(42)(见http://jsfiddle.net/alnitak/ee3hb/).
但是,有些人对扩展内置类型的原型感到不满.
编辑 ES5引入的方式安全地扩展双方Object.prototype并Array.prototype没有打破for ... in ...列举:
Object.defineProperty(Array.prototype, 'setAll', {
value: function(v) {
...
}
});
Run Code Online (Sandbox Code Playgroud)
编辑2在ES6草案中,现在也有Array.prototype.fill用法cool.fill(42)
Far*_*ina 22
ES6方法很干净.首先你初始化一个x长度的数组,然后调用fill它的方法.
let arr = new Array(3).fill(9)
Run Code Online (Sandbox Code Playgroud)
这将创建一个包含3个元素的数组,如:
[9, 9, 9]
Run Code Online (Sandbox Code Playgroud)
mus*_*.0x 20
map 是这个问题最合理的解决方案.
let xs = [1, 2, 3];
xs = xs.map(x => 42);
xs // -> [42, 42, 42]
Run Code Online (Sandbox Code Playgroud)
但是,如果阵列有可能是稀疏的,那么你需要使用for或甚至更好for .. of.
看到:
| 归档时间: |
|
| 查看次数: |
81437 次 |
| 最近记录: |