В двух упражнениях на сайте excism.io (Матрица и Треугольник Паскаля) я хотел создать массив пустых массивов. Есть много способов сделать это. Мой ум новичка по умолчанию использует forEach, for петли или while петли. Однако есть и другие варианты.

Я нашел эту статью о stackoverflow полезной. О двух новых вариантах я узнал из статьи.

Вариант 1: Array.prototype.fill

const emptyRows = new Array(4).fill([]);
console.log(emptyRows);  
// returns [[], [], [], []] in Sublime
// returns [[], [circular object array], [circular object array], [circular object array]] in CodePen

Это кажется действительно элегантным, легко читать код и понимать, что он делает. Однако вывод CodePen меня смущает. Что такое [circular object array]? Почему первый элемент [] соответствует ожиданиям, а остальные - другим?

Еще больше сбивает с толку то, что когда я использую этот код и вызываю emptyRows в методе, я получаю фатальную ошибку: нехватка памяти в куче JavaScript. Не знаю почему. Я полагаю, этот вариант работал бы хорошо, если бы я заполнял массив чем-то другим, кроме [].

Вариант 2: Array.from

const emptyRows = Array.from(Array(4), () => []);
console.log(emptyRows);  
// returns [[], [], [], []] in Sublime
// returns [[], [], [], []] in CodePen

Этот вариант работает хорошо. Для меня нет роковой ошибки. Я не вполне понимаю, как это работает, даже с объяснением StackOverflow. Но вот моя попытка сломать это.

Array(4) создает массив из четырех undefined объектов: [undefined, undefined, undefined, undefined].

() => [] выполняет итерацию по каждому undefined элементу и заменяет его на []. Однако вы не можете использовать Array(4).map(() => []). Это то, чего я не совсем понимаю. То есть я не понимаю, почему map отличается и не может быть использован. Но идем дальше.

Array.from делает из этого массив. Примеры в документации для разработчиков Mozilla, на мой взгляд, рассматривают более простые варианты использования, так что это тоже не совсем понятно для меня. А именно зачем мне вообще Array.from? Но я приму это и пойду пока. Надеюсь, в будущем я пойму, как это работает.