You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript过滤对象数组重复label并按分隔符合并对应ID

JavaScript实现方案

核心思路

使用临时映射对象存储每个label对应的id集合,遍历原数组完成同label的id归集后,再转换为目标格式数组,时间复杂度为O(n),效率较高。

代码实现

const originalArr = [ 
  {id: 1, label: "Hello"}, 
  {id: 2, label: "World"}, 
  {id: 3, label: "Hello"}, 
  {id: 4, label: "Sunshine"}, 
  {id: 5, label: "Hello"} 
];

// 1. 归集同label的所有id
const labelIdMap = {};
originalArr.forEach(item => {
  // 首次遇到该label时初始化空数组存储id
  if (!labelIdMap[item.label]) {
    labelIdMap[item.label] = [];
  }
  labelIdMap[item.label].push(item.id);
});

// 2. 转换为目标结构数组
const result = Object.entries(labelIdMap).map(([label, idList]) => ({
  id: idList.join('~'),
  label: label
}));

console.log(result);
/* 输出结果:
[
  { id: '1~3~5', label: 'Hello' },
  { id: '2', label: 'World' },
  { id: '4', label: 'Sunshine' }
]
*/

简洁版实现(reduce写法)

如果习惯用reduce做归集,可以用更简短的写法,逻辑完全一致:

const result = Object.entries(
  originalArr.reduce((acc, cur) => {
    acc[cur.label] = acc[cur.label] ? [...acc[cur.label], cur.id] : [cur.id];
    return acc;
  }, {})
).map(([label, ids]) => ({ id: ids.join('~'), label }));

内容的提问来源于stack exchange,提问作者user1124166

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:27:01