Convert array to object by concatenating values under same key

I tried searching through previous questions but couldn’t find the answer so here’s a very generic question.

I have a multidimensional array like so:

array = [
    [ "1", "2013-14" , 1234],​​
    [ "2", "2013-14", 2345],
    [ "1", "2014-15" , 5234],​​
    [ "2", "2014-15", 7345],
]

I am trying to change it to a nested object based on the year:

obj = {
  "2013-14": { 1: "1234", 2: "2345" },
  "2014-15": { 2: "5234", 2: "7345" }
}

I tried this, which gave a similar but wrong solution:

let obj = {}
for (let i = 0; i < array.length; i++) {
  obj[array[i][1]] = {
    [array[i][0]]: array[i][2]
  }
}

the solution I got:

obj = {
      "2013-14": { 2: "2345" },
      "2014-15": { 2: "7345" }
}

so instead of concatenating values under the same key, which in this case is the year, it is overriding it and saving the last one

Answer

you can use spread operator {…} to concat it.

Here is the code:

var array = [
  ["1", "2013-14", 1234],
  ["2", "2013-14", 2345],
  ["1", "2014-15", 5234],
  ["2", "2014-15", 7345],
];

let obj = {};
for (let i = 0; i < array.length; i++) {
  obj[array[i][1]] = { ...obj[array[i][1]], [array[i][0]]: array[i][2] };
}

console.log(obj);