is there a shorter, better way to generate ‘n’ length 2D array?
var a = (function(){ var i=9, arr=[]; while(i--) arr.push([]); return arr })();
a // [ [],[],[],[],[],[],[],[],[] ]
** old-school short-way**:
var a = (function(a){ while(a.push([]) < 9); return a})([]);
UPDATE – Using ES2015
Array(5).fill().map(a=>[]); // will create 5 Arrays in an Array
// or
Array.from({length:5}, a=>[])
Emptying 2D array (saves memory rather)
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); // [[],[],[]]
Another way:
Yet another way:
This works because
.push()[docs] (specification) returns the new length of the array.That said, this is the wrong way of “reducing code”. Create a dedicated function with a meaningful name and use this one. Your code will be much more understandable:
Code is read much more often than written.