j3rry Yu
j3rry Yu

Reputation: 31

Combine JavaScript Object Duplicates

I want to join the rest of the values with the same key in the Javascript object. want to solve it using vanilla script or lodash..

example:

obj = [
  { M: 'M1', F: '123-test-123', CODE: 'A' },
  { M: 'M1', F: '123-test-123', CODE: 'B' },
  { M: 'M1', F: '123-test-123', CODE: 'C' },
  { M: 'M2', F: '123-test-456', CODE: 'A' },
  { M: 'M2', F: '123-test-456', CODE: 'A' }
  ...
]

desired result:

obj = [
  { M: 'M1', F: '123-test-123', CODE: 'A,B,C' },
  { M: 'M2', F: '123-test-456', CODE: 'A,B' },
  ...
]

Thank you!!!

Upvotes: 2

Views: 42

Answers (1)

Ankit Agarwal
Ankit Agarwal

Reputation: 30739

You can use Array.reduce() to get that desired output:

var obj = [
  { M: 'M1', F: '123-test-123', CODE: 'A' },
  { M: 'M1', F: '123-test-123', CODE: 'B' },
  { M: 'M1', F: '123-test-123', CODE: 'C' },
  { M: 'M2', F: '123-test-456', CODE: 'A' },
  { M: 'M2', F: '123-test-456', CODE: 'A' }
];

var res = obj.reduce((acc, item) => {
  let existItem = acc.find(({M, F}) => M === item.M && F === item.F);
  if(existItem) {
    existItem.CODE += ',' + item.CODE;
  } else {
    acc.push(item);
  }
  return acc;
}, []);

console.log(res);

Using another way besides, Array.reduce():

var obj = [
  { M: 'M1', F: '123-test-123', CODE: 'A' },
  { M: 'M1', F: '123-test-123', CODE: 'B' },
  { M: 'M1', F: '123-test-123', CODE: 'C' },
  { M: 'M2', F: '123-test-456', CODE: 'A' },
  { M: 'M2', F: '123-test-456', CODE: 'A' }
];

var resObj = {};

obj.forEach((item) => {
  let settingValues = resObj[item.M] ? 
    resObj[item.M].CODE += ',' + item.CODE :
    resObj[item.M] = item;
});

console.log(Object.values(resObj));

Upvotes: 5

Related Questions