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

如何使用lodash处理数组重复元素,不删除而是合并存储到内部数组

实现代码(JavaScript)
// 原始数据
const originalArr = [{letter: 'a', number: 1}, {letter: 'a', number: 2}, {letter: 'a', number: 3}, {letter: 'b', number: 1}, {letter: 'b', number: 2}, {letter: 'a', number: 4}, {letter: 'b', number: 1}, {letter: 'a', number: 3}];

const result = Object.values(originalArr.reduce((acc, cur) => {
  // 以letter作为分组唯一标识
  const groupKey = cur.letter;
  // 对应分组不存在时初始化结构
  if (!acc[groupKey]) {
    acc[groupKey] = {
      letter: groupKey,
      numbers: []
    };
  }
  // 校验当前number是否已存在于分组内,避免重复存储
  const numberExisted = acc[groupKey].numbers.some(item => item.number === cur.number);
  if (!numberExisted) {
    acc[groupKey].numbers.push({number: cur.number});
  }
  return acc;
}, {}));

console.log(result);

执行上述代码输出的结果和你要求的预期结构完全一致。

实现原理说明
  • 采用Array.reduce()做分组统计,初始值设置为空对象作为临时存储容器,以letter的值作为键名,查找分组的时间复杂度为O(1),远高于遍历数组查找分组的效率。
  • 遍历原始数组的每个元素时,先判断对应letter的分组是否存在,不存在就初始化符合输出要求的分组结构。
  • 用Array.some()做同分组内number的重复校验,只有未存在的number才会推入分组的numbers数组,实现去重逻辑。
  • 最后用Object.values()提取临时存储对象的所有值,即可得到最终的数组格式结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 18:36:08