var cool = new Array(3);
cool[setAll] = 42; //cool[setAll] is just a pseudo selector..
alert(cool);
結果
一個警告消息:
42,42,42
如何更改/設置數組的所有值到一個特定的值?
var cool = new Array(3);
cool[setAll] = 42; //cool[setAll] is just a pseudo selector..
alert(cool);
結果
一個警告消息:
42,42,42
如何更改/設置數組的所有值到一個特定的值?
有沒有內置的方式,你必須遍歷所有的人:
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) {
...
}
});
EDIT 2在ES6草案現在Array.prototype.fill
還有還有,使用cool.fill(42)
使用for
循環,並設置每個反過來。
其他答案是好的,但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);
}
可能無法工作無處不在,但。 :-)
反向數組循環的好選擇,我們需要更多的js land – 2016-02-13 06:04:10
晚了一點,但是這是可能使用Array.map,這是不錯的瀏覽器和IE9 +可用。
var xs = [1, 2, 3];
xs.map(function(x, i, ar){
ar[i] = 42;
});
xs; // -> [42, 42, 42]
編輯:稍微更簡潔:
var xs = [1, 2, 3];
xs.map(function(){
return 42;
}); // -> [42, 42, 42]
我在「體面的瀏覽器和IE9 +」上大聲笑了起來。做得好。 – kfrncs 2013-11-19 16:42:04
不好的答案 - 這不僅是對'Array.prototype.map'的濫用(你應該使用'forEach'來遍歷一個數組,而'.map'只有當你希望_'return'_一個新的數組時基於它),但也要求數組_already在it_中有值。 '.map'和'.forEach'都會忽略具有未定義鍵的數組元素。 – Alnitak 2015-01-03 21:02:53
@Alnitak查看點#1的第二個代碼示例,並不明白爲什麼點#2使這個答案不好。這種方法是否「設置數組的所有值」?是。 – 2015-01-19 05:34:38
試試這個:
for(var i in array) array[i]=fixedValue;
不,不要 - 'for ... in'用於對象鍵,而不是數組。 – Alnitak 2015-01-03 21:07:38
謝謝你的存在! – Tomkay 2011-04-27 10:52:40
不要感謝我 - 謝謝我的父母! ;) – Alnitak 2011-04-27 10:55:31
我覺得有必要在這裏添加一個警告:擴展本地對象(在這種情況下'Array')大多數被認爲是不好的做法。 – Ben 2014-06-20 18:15:06