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

技术需求:数组仅允许id为5的对象重复,其余id对象需去重

处理JavaScript数组:仅保留id为5的重复项,移除其他id的重复对象

需求很明确:在对象数组里,只有id === 5的对象可以重复出现,其他id的对象只保留首次出现的实例,后续重复的都要删掉。

输入示例

const arrData = [
  {id:1,name:"John"},
  {id:2,name:"david"},
  {id:5,name:"rohn"},
  {id:4,name:"Alex"},
  {id:1,name:"roy"},
  {id:5,name:"malan"},
  {id:3,name:"jonny"},
  {id:2,name:"rod"}
];

预期输出

[
  {id:1,name:"John"},
  {id:2,name:"david"},
  {id:5,name:"rohn"},
  {id:4,name:"Alex"},
  {id:5,name:"malan"},
  {id:3,name:"jonny"}
]

解决方案

可以用Array.reduce()结合Set来高效处理,逻辑清晰且性能不错:

const processedArr = arrData.reduce((acc, current) => {
  // 用Set记录已经保留过的非5的id
  const seen = acc.seen;
  if (current.id === 5) {
    // id为5的直接加入结果数组
    acc.result.push(current);
  } else if (!seen.has(current.id)) {
    // 非5的id没出现过,就加入结果并记录到Set里
    seen.add(current.id);
    acc.result.push(current);
  }
  return acc;
}, { result: [], seen: new Set() }).result;

console.log(processedArr);

代码解释

  • 初始化一个累加器对象,包含result(存储最终数组)和seen(用Set存储已处理的非5id,确保O(1)的查找效率)。
  • 遍历原数组的每个对象:
    • 若当前对象id是5,直接添加到result,不做额外判断。
    • 若id不是5,检查seen里是否存在该id:不存在则添加到result并把id存入seen;存在则跳过。
  • 最后取出累加器里的result就是处理后的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:37:17