Задать вопрос
@kirillleogky

Как создать пустой массив с undefined?

Есть задача https://www.codewars.com/kata/sequence-generator-1


все решил но почему-то не работает создание нового массива с длинной n и значениями undefined

let arrfun = new Array(n);
return arrfun.map(pattern);




function sequence(n, pattern) {
  let array = [];
  if (typeof(pattern) === 'function') {
    let arrfun = new Array(n);
    return arrfun.map(pattern);
  };

  while (n != 0) {
    n--;
    array.push(pattern);
  }
  return array;
}


Не могу понять почему массив не работает
Значения undefined
Но все равно не работает
Подскажите пожалуйста в чем проблема и как её решить
Спасибо
  • Вопрос задан
  • 1553 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 3
@StockholmSyndrome
new Array(n).fill();
Ответ написан
Попробуйте создавать массив таким образом:
const array = Array.from({ length: 10 }, () => undefined);


Дело в том что когда вы объявляете массив таким образом:
let arrfun = new Array(n);
это еще не значит что его элементы определены, да вы указали длину массива, но этого недостаточно, если заглянуть в консоль браузера то увидите разницу объявления массива моим и вашим способом. В вашем массиве элементов нет, только длинна хотя если обратиться к элементу по индексу, то вернется undefined, вот такая особенность JS.

5db8834aed820672568835.png
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
Если отвечать непосредственно на заданный вопрос, то [...Array(n)]. Но, учитывая реально решаемую задачу, не надо никаких массивов, состоящих из undefined, заполняйте сразу тем, чем надо:

const sequence = (length, pattern) =>
  pattern instanceof Function
    ? Array.from({ length }, pattern)
    : Array(length).fill(pattern);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
Какую проблему вы решаете?
В JavaScript пустой массив из n элементов можно создать просто:
new Array(n)

Да, в консоли вы увидите, что массив заполнен некими "empty", а не "undefined", но в самом языке JavaScript нет пустых значений типа "empty". На самом деле это и есть undefined. То, что отображается в консоли, никак нельзя почувствовать и пощупать кодом. А значит эта особенность никак не влияет на код и не может быть причиной никаких ошибок.

Поэтому я повторю вопрос: какую проблему вы решаете? Ведь empty значения не могут мешать вашим скриптам.

Если хотите, проверьте свой код не в Chrome, а в Firefox, там в консоли нет никаких empty. И не должно быть. То, как там выделяется и освобождается память, скрыто даже в консоли, чтобы не сбивать с толку начинающих программистов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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