Create an empty two dimensional array in Javascript, with keys

You could create the wanted objects by looping and reducing the data.

The callback of Array#reduce takes as first parameter the accumulator, here it is an object, and as second parameter the value of the iterating array.

As startValue for the reduce, it take an (kind of empty) object and usdes this object to add properties. To have this object (aka accumulator) ready for the next loop (and final result), it has to be returned.

var x = [2, 4, 6, 8],
    y = [10, 20, 40, 60, 80],
    result = x.reduce((r, k) => {
        r[k] = y.reduce((q, l) => {
            q[l] = 0;
            return q;
        }, {});
        return r;
    }, {});

console.log(result);


You could map the y array to get the entries for a row object. Use Object.fromEntries() to get an object from the entries. Then map the x array to get the output object with a copy of each row object as value

const x = [2, 4, 6, 8],
      y = [10, 20, 40, 60, 80],
      row = Object.fromEntries( y.map(v => [v, 0]) ),
      output = Object.fromEntries( x.map(key => [key, { ...row }]) )

console.log(output)

Cloning is required because modifying one of the rows will update the other values since they are all pointing to the same reference


You can try following.

  • Since you have same object repeated as child object, create it first.
  • Now loop over parent keys and using spread or Object.assign, set it as object.

This way you have less number of iteration and code looks clean

const x = [2,4,6,8]
const y = [10,20,40,60,80]

const innerObj = y.reduce((acc, item) => {
  acc[ item ] = 0;
  return acc;
}, {});

const result = x.reduce((acc, item) => {
  acc[ item ] = { ...innerObj };
  return acc;
}, {});

console.log(result)