Короче говоря, я ищу способ создания и заполнения 2D-массивов с использованием ES6, чтобы избежать циклов for. Созданный массив должен содержать все 0. Я пробовал много разных подходов, поэтому я не могу опубликовать все из них.

var [r, c] = [5, 5]; 
var m = Array(r).fill(Array(c).fill(0));

Это работает, но создает несколько экземпляров одного и того же массива, и добавление фрагмента Array(r).fill(Array(c).fill(0).slice()); также не помогает.

Я также попытался создать пустые массивы, а затем выполнить их цикл, но это совсем другая проблема, вы, очевидно, не можете forEach() или map() пустой массив, и я даже не мог перебрать заполненный массив эффективно.

Я что-то здесь упускаю? Целый ряд циклов for - лучший способ приблизиться к этому? Это выглядит очень грязно и чрезмерно долго. Любая помощь приветствуется.

4
Mare_413 4 Мар 2018 в 03:43

4 ответа

Лучший ответ

Делать это сработало для меня:

var [r, c] = [5, 5]; 
var m = Array(r).fill().map(()=>Array(c).fill(0));

В основном, просто заполняя его фиктивным значением, чтобы вы могли отобразить его

6
Daan 29 Ноя 2018 в 15:06
const nthArray = (n) => Array.from(Array(n), () => Array(5).fill(0))

const arr = nthArray(3);

console.log(arr);
0
Farhad Yasir 4 Мар 2018 в 06:43

Для тех, кому нужно то же самое, но с undefined в качестве каждого значения, это также работает.

const x = 100;
const y = 100;
const grid = [...new Array(x)].map(() => [...new Array(y)]);

Чтобы заполнить массив, просто отобразите внутреннее значение. Это создаст массив, заполненный 0 для каждого значения.

const x = 100;
const y = 100;
const grid = [...new Array(10)].map(() => [...new Array(10)].map(() => 0));
0
Alexis Tyler 19 Дек 2019 в 10:14

Вы могли бы использовать Array.from, который принимает функцию обратного вызова и внутри массивов возврата с 0, используя метод fill.

const arr = Array.from(Array(2), () => Array(5).fill(0))
console.log(arr)

Или вы можете просто создать массив, где каждый элемент является количеством элементов в подмассиве, а затем использовать методы map и fill.

const arr = [5, 5].map(e => Array(e).fill(0))
console.log(arr)
3
Nenad Vracar 4 Мар 2018 в 00:48