Reputation: 31
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
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