En pocas palabras, estoy buscando una manera de crear y llenar matrices 2D usando ES6, en un esfuerzo por evitar los bucles for. La matriz creada debe contener todos los 0. He probado muchos enfoques diferentes, así que no puedo publicarlos todos.

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

Esto funciona pero crea un montón de instancias de la misma matriz, y agregar rebanada Array(r).fill(Array(c).fill(0).slice()); tampoco ayuda.

También intenté crear las matrices vacías y luego recorrerlas en bucle, pero ese es un problema completamente diferente, aparentemente no puedes forEach() o map() una matriz vacía, y ni siquiera pude recorrer una llena. eficientemente.

¿Me estoy perdiendo de algo? ¿Son muchos bucles for la mejor manera de abordar esto? Se ve muy desordenado y demasiado largo. Cualquier ayuda apreciada.

3
Mare_413 4 mar. 2018 a las 03:43

4 respuestas

La mejor respuesta

Hacer esto funcionó para mí:

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

Básicamente solo llenándolo con un valor ficticio para que pueda mapearlo

6
Daan 29 nov. 2018 a las 15:06
const nthArray = (n) => Array.from(Array(n), () => Array(5).fill(0))

const arr = nthArray(3);

console.log(arr);
0
Farhad Yasir 4 mar. 2018 a las 06:43

Para aquellos que necesitan lo mismo pero con undefined como cada valor, esto también funciona.

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

Para llenar la matriz simplemente mapee el valor interno. Esto hará una matriz llena de 0 para cada valor.

const x = 100;
const y = 100;
const grid = [...new Array(10)].map(() => [...new Array(10)].map(() => 0));
0
Alexis Tyler 19 dic. 2019 a las 10:14

Podrías usar Array.from que toma una función de devolución de llamada y dentro de matrices de retorno con 0 's usando el método fill.

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

O bien, puede crear una matriz donde cada elemento es el número de elementos en la submatriz y luego usar los métodos map y fill.

const arr = [5, 5].map(e => Array(e).fill(0))
console.log(arr)
3
Nenad Vracar 4 mar. 2018 a las 00:48