cashsavings
cashsavings

Reputation: 73

Best way to merge objects using key in an array?

What the best way to merge objects in an array using a key?

[
   {
      "refr": "https://example.com/",
      "transactions": 1
   },
   {
      "refr": null,
      "pageviews": 1
   },
   {
      "refr": "https://example.com/",
      "pageviews": 1
   }
]

Desired Result using 'refr' key:

[
   {
      "refr": "https://example.com/",
      "transactions": 1,
      "pageviews": 1
   },
   {
      "refr": null,
      "pageviews": 1
   },   
]

I am looking for a solution that does NOT use any third party tools, like lodash.

Upvotes: 1

Views: 44

Answers (1)

Derek Wang
Derek Wang

Reputation: 10194

Using Array.prototype.reduce, you can group values by the refr key.

const input = [
   {
      "refr": "https://example.com/",
      "transactions": 1
   },
   {
      "refr": null,
      "pageviews": 1
   },
   {
      "refr": "https://example.com/",
      "pageviews": 1
   }
];

const groupByRefr = input.reduce((acc, cur) => {
  acc[cur.refr] ? acc[cur.refr] = { ...acc[cur.refr], ...cur } : acc[cur.refr] = cur;
  return acc;
}, {});
const result = Object.values(groupByRefr);
console.log(result);

Upvotes: 3

Related Questions