javascript - 合并 JavaScript 对象重复项

标签 javascript object

我想将其余值与 Javascript 对象中的相同键连接起来。 想要使用普通脚本或 lodash 来解决它..

示例:

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' }
  ...
]

期望的结果:

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

谢谢!!!

最佳答案

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

除此之外使用另一种方式,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));

关于javascript - 合并 JavaScript 对象重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59099781/

相关文章:

image - 查找图像中对象的坐标的最简单方法是什么?

javascript - 是否可以仅针对特定 y 范围更改 highchart xy 图中的线条颜色?

javascript - jqgrid 中带有自定义函数调用的超链接/按钮

javascript - 如何区分 jquery 中 keydown 上的键 "5"和 "%"?

javascript - MongoDB 仅返回其他文档中的用户与字段不匹配的文档

class - 类的所有私有(private)变量的 getter 和 setter?

javascript - drive rest api 的 File 对象中的 downloadUrl 属性是什么?

javascript - 从全局增加 setInterval() 值

javascript - 如何根据对象或 iframe 内容的长度动态更改其长度

PHP:从对象中获取数据