Вот быстрый способ создания двумерного массива.
function createArray(x, y) {
return Array.apply(null, Array(x)).map(e => Array(y));
}
Вы также можете легко превратить эту функцию в функцию ES5.
function createArray(x, y) {
return Array.apply(null, Array(x)).map(function(e) {
return Array(y);
});
}
Почему это работает: конструктор new Array(n)
создает объект с прототипом Array.prototype
и затем присваивает объекту length
, в результате чего получается незаполненный массив. Из-за отсутствия реальных членов мы не можем запустить функцию Array.prototype.map
.
Однако, когда вы предоставляете более одного аргумента конструктору, например, когда вы делаете Array(1, 2, 3, 4)
, конструктор будет использовать объект arguments
для создания экземпляра и правильного заполнения объекта Array
.
По этой причине мы можем использовать Array.apply(null, Array(x))
, потому что функция apply
будет распространять аргументы в конструкторе. Для пояснения, выполнение Array.apply(null, Array(3))
эквивалентно выполнению Array(null, null, null)
.
Теперь, когда мы создали реальный заполненный массив, все, что нам нужно сделать, это вызвать map
и создать второй слой (y
).