best way to generate empty 2D array

Viewed 22986

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); // [[],[],[]]
10 Answers

best way to generate 2D array in js by ES6 by Array.from

function twodimension(input) {
  let index = 0,
    sqrt = Math.sqrt(input.length);

  return Array.from({
    length: sqrt
  }, (nothing, i) => Array.from({
    length: sqrt
  }, (nothingTwo, j) => input[index++]))
}

console.log(twodimension('abcdefghijklmnopqrstupwxy'))
console.log(twodimension([1,2,3,4,5,6,7,8,9]))

function input(length, fill) {
  let getNums = length * length;
  let fillNums = 1
  if (fill == 'minus') {
    return Array.from({
      length: length
    }, (nothing, i) => Array.from({
      length: length
    }, (nothingTwo, j) => getNums--))
  } else if (fill == 'plus') {
    return Array.from({
      length: length
    }, (nothing, i) => Array.from({
      length: length
    }, (nothingTwo, j) => fillNums++))
  }
  
  // you can dping snake ladders also with Array.from

  if (fill === 'snakes') {
    return Array.from({
        length: length
      }, (_, one) =>
      Array.from({
        length: length
      }, (_, two) => getNums--)
    ).map((el, i) =>
      i % 2 == 1 && length % 2 == 0 ? el.reverse() :
      i % 2 == 0 && length % 2 == 1 ? el.reverse() : el
    );
  }


}

console.log(input(8, 'minus'))
console.log(input(10, 'plus'))

console.log(input(5, 'snakes'))

you do anything with Array.from, it is easy to use and fast, this is the new method in ES6 syntax

Related