Map и undefined

Павел Юхневич

Такой код

x = new Array(5);
y = x.map((item) => item = 7);
console.log(y);

ничего не сделает(выведет 5 undefined);

не если задать массив через цикл то все ОК;

в чем проблема?

2 ответа

Павел Юхневич

map обходит массив только по существующим элементам.

В данном случае будет создан массив с 5 дырками. Поэтому применение map здесь ничего не даст.

Кроме того, для заполнения массива, map использовать неверно. Вместо него, лучше использовать fill

x = new Array(5);
x.fill(7);
console.log(x);

Если же заполнять массив нужно не константным объектом, а зависящим, например, от индекса, можно воспользоваться функцией Array.from

x = Array.from({
  length: 5
}, (el, index) => index);
console.log(x);


Павел Юхневич

Вообще-то во всём...

  1. Присваивание аргументу функции ничего в массиве изменить в принципе не может.
  2. На индексах, отсутствующих в массиве map не срабатывает. А у тебя все такие.
  3. Надо использовать fill, а не map:

    console.log(Array(5).fill(7))
  4. Дело не в undefined:

    console.log([undefined, undefined, undefined, undefined, undefined].map(x => 7))

licensed under cc by-sa 3.0 with attribution.