код
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/).
Однако некоторые люди недовольны расширением прототипа встроенных типов.
EDIT ES5 представила способ безопасного расширения как Object.prototype
, так и Array.prototype
без разбивки перечисления for ... in ...
:
Object.defineProperty(Array.prototype, 'setAll', {
value: function(v) {
...
}
});
EDIT 2 В проекте ES6 также теперь Array.prototype.fill
, использование cool.fill(42)
Подход ES6 очень чист. Поэтому сначала вы инициализируете массив длины x, а затем вызываете на нем метод fill
.
let arr = new Array(3).fill(9)
это создаст массив с тремя элементами типа:
[9, 9, 9]
map
является наиболее логичным решением для этой проблемы.
let xs = [1, 2, 3];
xs = xs.map(x => 42);
xs // -> [42, 42, 42]
Однако, если есть вероятность, что массив разрежен, вам нужно использовать for
или, даже лучше, for .. of
.
См:
Используйте цикл for
и установите каждый по очереди.
Другие ответы - это Ok, но цикл 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);
}
Может не работать везде.: -)
На самом деле, вы можете использовать этот идеальный подход:
let arr = Array.apply(null, Array(5)).map(() => 0);
// [0, 0, 0, 0, 0]
Этот код создаст массив и заполнит его нулями. Или просто:
let arr = new Array(5).fill(0)
Это 2019 год, и вы должны использовать это:
let arr = [...Array(20)].fill(10)
Таким образом, в основном 20
является length
или новым экземпляром Array
.
Попробуйте следующее:
for(var i in array) array[i]=fixedValue;