Javascript | Установите все значения массива

Это прекрасно работает в bash:

END=5
i=1 ; while [[ $i -le $END ]] ; do
    echo $i
    ((i = i + 1))
done
29
задан animuson 16 June 2012 в 23:54
поделиться

7 ответов

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

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)

47
ответ дан Alnitak 16 June 2012 в 23:54
поделиться

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

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

это создаст массив с 3 элементами, такими как:

[9, 9, 9]
21
ответ дан Faris Zacina 16 June 2012 в 23:54
поделиться

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

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

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

let arr = new Array(5).fill(0)
1
ответ дан Сергей Язев 16 June 2012 в 23:54
поделиться

Другие ответы - «Хорошо», но цикл 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);
}

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

1
ответ дан RobG 16 June 2012 в 23:54
поделиться

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

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

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

См .:

19
ответ дан mustafa.0x 16 June 2012 в 23:54
поделиться

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

3
ответ дан Quentin 16 June 2012 в 23:54
поделиться

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

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

Так в основном 20 length или новый иллюстрировавший примерами Array.

1
ответ дан 27 November 2019 в 19:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: