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' }
...
]
Run Code Online (Sandbox Code Playgroud)
desired result:
obj = [
{ M: 'M1', F: '123-test-123', CODE: 'A,B,C' },
{ M: 'M2', F: '123-test-456', CODE: 'A,B' },
...
]
Run Code Online (Sandbox Code Playgroud)
Thank you!!!
您可以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 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);Run Code Online (Sandbox Code Playgroud)
除了使用另一种方式,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));Run Code Online (Sandbox Code Playgroud)