0

I want to merge the same value data which is given below: My Array is like this:

const data = [{
    name: "a",
    value: "aa",
  },
  {
    name: "b",
    value: "ab",
  },
  {
    name: "c",
    value: "ac",
  },
  {
    name: "d",
    value: "aa",
  },
  {
    name: "e",
    value: "ab",
  },
  {
    name: "f",
    value: "ac",
  },
  {
    name: "g",
    value: "aa",
  },
  {
    name: "h",
    value: "ab",
  },
  {
    name: "i",
    value: "ac",
  }
]

And I want output like this using reduce from javascript:

[{
name:["a","d","g"],
branch:"aa",
},
{
name:["b","e","h"],
branch:"ab",
},
{
name:["c","f","i"],
branch:"ac",
}

]

I have tried but it does not give me the result that I want.Thanks in advance.

Chris G
  • 1,598
  • 1
  • 6
  • 18
Nisarg
  • 57
  • 5

1 Answers1

0

This should do the trick:

// merge the data by value
const merged = data.reduce((acc, cur) => {
  const found = acc.find((item) => item.value === cur.value);
  if (found) {
    found.names.push(cur.name);
  } else {
    acc.push({ value: cur.value, names: [cur.name] });
  }
  return acc;
 }
, []);

console.log(merged)
TwistedOwl
  • 1,195
  • 1
  • 17
  • 30