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

如何从对象数组中移除所有重复对象,仅保留唯一出现的项?

保留JavaScript数组中仅出现一次的对象

原数组

[
  {
    "code": "d1",
    "title": "Title 1"
  },
  {
    "code": "d2",
    "title": "Title 2"
  },
  {
    "code": "d3",
    "title": "Title 3"
  },
  {
    "code": "d4",
    "title": "Title 4"
  },
  {
    "code": "d4",
    "title": "Title 4"
  },
  {
    "code": "d3",
    "title": "Title 3"
  }
]

需求说明

仅保留数组中仅出现一次的对象,排除所有存在重复的对象(无论重复次数多少),最终输出仅包含d1和d2的数组。

解决方案

方法1:基于唯一标识(如code)统计过滤

如果可以确定code是对象的唯一标识(同code则对象完全相同),可以用以下代码:

const originalArray = [
  { "code": "d1", "title": "Title 1" },
  { "code": "d2", "title": "Title 2" },
  { "code": "d3", "title": "Title 3" },
  { "code": "d4", "title": "Title 4" },
  { "code": "d4", "title": "Title 4" },
  { "code": "d3", "title": "Title 3" }
];

// 统计每个code的出现次数
const codeCount = originalArray.reduce((counts, item) => {
  counts[item.code] = (counts[item.code] ?? 0) + 1;
  return counts;
}, {});

// 过滤出仅出现一次的对象
const result = originalArray.filter(item => codeCount[item.code] === 1);

console.log(result);

方法2:基于完整对象匹配统计过滤

如果需要严格匹配对象的所有属性(防止code相同但其他属性不同的情况),可以将对象序列化为字符串作为统计键:

const originalArray = [
  { "code": "d1", "title": "Title 1" },
  { "code": "d2", "title": "Title 2" },
  { "code": "d3", "title": "Title 3" },
  { "code": "d4", "title": "Title 4" },
  { "code": "d4", "title": "Title 4" },
  { "code": "d3", "title": "Title 3" }
];

// 统计每个完整对象的出现次数
const itemCount = originalArray.reduce((counts, item) => {
  const key = JSON.stringify(item);
  counts[key] = (counts[key] ?? 0) + 1;
  return counts;
}, {});

// 过滤出仅出现一次的对象
const result = originalArray.filter(item => itemCount[JSON.stringify(item)] === 1);

console.log(result);

输出结果

两种方法最终都会得到:

[
  {
    "code": "d1",
    "title": "Title 1"
  },
  {
    "code": "d2",
    "title": "Title 2"
  }
]

内容的提问来源于stack exchange,提问作者Kabir Ul Althamash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:25:20