values una two new matriz hacer example dimensional como bidimensional array 10x10 javascript arrays

javascript - two - La mejor manera de generar una matriz 2D vacía



matrix javascript example (9)

Acabo de descubrir otra forma de ES6 con una expresión de línea:

Array.from({length: N}, () => [])

Array.from (arrayLike [, mapFn [, thisArg]])

Más detalles sobre su implementación / polyfill ⇢ MDN Array.from ()

Otra solución interesante con la ayuda de la array spread syntax de array spread syntax :

[...Array(N)].map(() => [])

¿Existe una forma mejor y más corta de generar un arreglo 2D de ''n'' longitud?

var a = (function(){ var i=9, arr=[]; while(i--) arr.push([]); return arr })(); a // [ [],[],[],[],[],[],[],[],[] ]

** camino corto de la vieja escuela **:

var a = (function(a){ while(a.push([]) < 9); return a})([]);

ACTUALIZACIÓN - Uso de ES2015

Array(5).fill().map(a=>[]); // will create 5 Arrays in an Array // or Array.from({length:5}, a=>[])

Vaciar matriz 2D (ahorra memoria en lugar)

function make2dArray(len){ var a = []; while(a.push([]) < len); return a; } function empty2dArray(arr){ for( var i = arr.length; i--; ) arr[i].length = 0; } // lets make a 2D array of 3 items var a = make2dArray(3); // lets populate it a bit a[2].push(''demo''); console.log(a); // [[],[],["demo"]] // clear the array empty2dArray(a); console.log(a); // [[],[],[]]


De otra manera:

for(var a = [];a.length < 10; a.push([])); // semicolon is mandatory here

Otra forma más:

var a = []; while(a.push([]) < 10);

Esto funciona porque .push() [docs] ( specification ) devuelve la nueva longitud de la matriz.

Dicho esto, esta es la manera incorrecta de "reducir el código". Cree una función dedicada con un nombre significativo y use esta. Tu código será mucho más comprensible:

function get2DArray(size) { size = size > 0 ? size : 0; var arr = []; while(size--) { arr.push([]); } return arr; } var a = get2DArray(9);

El código se lee mucho más a menudo que escrito.


En ES6:

(m, n, initialElementValue) => Array(m).fill(Array(n).fill(initialElementValue))


forma más corta puede ser:

for(var i=9,a=[];i>=0;i--){ a.push([]) }


var x = 3, y = 5, arr = Array(y).fill(); arr = arr.map(function(){return Array(x).fill('' '')}); console.log(arr);


for(var i=9,a=[];i>=0;i--){ a.push([]) }


var a = []; var max_length = 10; for(var i = 0; i < max_length; ++i){ a[i] = []; }


var a = []; for(var i=0;i<10;i++) { a[i] = []; }


Array(cardinality).fill(0).map(function(item) {return [];});

donde cardinalidad es el número de elementos que está mirando. En este caso, sería 9. Esto fue sugerido por uno de mis colegas en realidad. Esto es bueno, creo :) Esto es válido desde ECMA V6. Documentación: Array::fill