Подтвердить что ты не робот

Javascript | Задайте все значения массива

код

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

Результат

Предупреждающее сообщение:

42,42,42

Как мне изменить/установить все значения массива на определенное значение?

4b9b3361

Ответ 1

Нет встроенного способа, вам придется перебрать все из них:

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)

Ответ 2

Подход ES6 очень чист. Поэтому сначала вы инициализируете массив длины x, а затем вызываете на нем метод fill.

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

это создаст массив с тремя элементами типа:

[9, 9, 9]

Ответ 3

map является наиболее логичным решением для этой проблемы.

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

Однако, если есть вероятность, что массив разрежен, вам нужно использовать for или, даже лучше, for .. of.

См:

Ответ 4

Используйте цикл for и установите каждый по очереди.

Ответ 5

Другие ответы - это 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);
}

Может не работать везде.: -)

Ответ 6

На самом деле, вы можете использовать этот идеальный подход:

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

Этот код создаст массив и заполнит его нулями. Или просто:

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

Ответ 7

Это 2019 год, и вы должны использовать это:

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

Таким образом, в основном 20 является length или новым экземпляром Array.

Ответ 8

Попробуйте следующее:

for(var i in array) array[i]=fixedValue;