javascript - JS : find and merge similar objects in array by key

标签 javascript arrays

我有一组数据。我需要通过 code 字段找到对应的对象并合并它们。如何做到这些?

const data = [
    {
      id: 'K1',
      code: 'KBP',
      zone: 'zone-k1'
    },
    {
      id: 'K2',
      code: 'KBP',
      zone: 'zone-k2'
    },
    {
      id: 'H',
      code: 'HCL',
      zone: 'zone-h'
    }
]


const expected = [
    {
      id: ['K1', 'K2'],
      code: 'KBP',
      zone: ['zone-k1', 'zone-k2']
    },
    {
      id: 'H',
      code: 'HCL',
      zone: 'zone-h'
    }
]

我试过使用 lodash uniqBygroupBy,但没有成功。我认为应该通过 reduce 来完成:

const res = () => {
    const similar = data.reduce((item, acc) => {
    return item.id === acc.id;
  })
}

最佳答案

您可以使用 Array.prototype.reduce 并按 code 对数据进行分组。

const data = [
    {
      gateId: 'K1',
      code: 'KBP',
      zone: 'zone-k1'
    },
    {
      gateId: 'K2',
      code: 'KBP',
      zone: 'zone-k2'
    },
    {
      gateId: 'H',
      code: 'HCL',
      zone: 'zone-h'
    }
];

const dataset = data.reduce((acc, curr) => {
  if (acc[curr.code] === undefined) {
    acc[curr.code]  = {
      code: curr.code,
      id: [curr.gateId],
      zone: [curr.zone],
    }
  } else {
    acc[curr.code].id.push(curr.gateId)
    acc[curr.code].zone.push(curr.zone)
  }
  
  return acc;
}, {});

const res = Object.values(dataset);


console.log(res);
.as-console-wrapper{ min-height: 100vh !important; top: 0}

更多你可以看到这个answer

关于javascript - JS : find and merge similar objects in array by key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72188369/

相关文章:

javascript - 在 javascript/JQuery 中访问 Angular 函数

arrays - 有没有办法显示数组中的下一个元素?

c - 使用 vector 名称作为指针

javascript - 在javascript中一次合并2个动态数组1个元素

javascript - 我可以动态地从 javascript 分配一个 Action 吗?

javascript - 将不同的数据发送到 Ember 中的嵌入式组件

javascript - leaflet 使用 jquery 和选择器更改圆半径

objective-c - 寻找类似 objective c NSList 的选项,(我知道之前有人在这里问过),你能提供什么例子?

java - Java 多维数组中的元素修改

javascript - 选择文件后范围变量未更改其值