Combine JavaScript Object Duplicates

j3r*_* Yu 2 javascript object

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!!!

Ank*_*wal 5

您可以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)