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

如何从给定对象数组中获取去重后的唯一对象数组?

JavaScript 对象数组去重方法

给定如下包含重复对象的数组:

let array = [{"name": "A","age": 12},{"name": "A","age": 12},{"name": "B","age": 35},{"name": "C","age": 32}];

要得到去重后的唯一对象数组,可使用以下几种实用方法:

方法1:Set + JSON 序列化/反序列化

由于对象是引用类型,直接存入Set无法识别内容相同的重复对象,因此先将对象转为字符串去重,再转回对象:

const uniqueArray = Array.from(new Set(array.map(item => JSON.stringify(item)))).map(str => JSON.parse(str));

console.log(uniqueArray);
// 输出:[{"name": "A","age": 12},{"name": "B","age": 35},{"name": "C","age": 32}]
  • 优点:代码简洁,快速实现
  • 注意:若对象键顺序不同(比如{"age":12,"name":"A"}与{"name":"A","age":12})会被判定为不同对象;同时无法处理函数、undefined等JSON不支持的类型。

方法2:reduce + 缓存对象(自定义去重规则)

如果需要灵活指定去重判断逻辑(比如用特定字段组合作为唯一标识),可以用reduce结合缓存对象实现,性能更优:

const uniqueArray = array.reduce((acc, current) => {
  // 用name和age拼接成唯一标识键
  const key = `${current.name}-${current.age}`;
  if (!acc.cache[key]) {
    acc.cache[key] = true;
    acc.result.push(current);
  }
  return acc;
}, { cache: {}, result: [] }).result;

console.log(uniqueArray);
  • 优点:自定义规则灵活,缓存对象查找为O(1)时间复杂度,处理大数据组效率更高
  • 适用场景:复杂对象、需要指定特定字段判断重复的场景

方法3:filter + Map

用filter筛选元素,同时用Map记录已出现过的对象标识:

const map = new Map();
const uniqueArray = array.filter(item => {
  const key = `${item.name}-${item.age}`;
  if (!map.has(key)) {
    map.set(key, item);
    return true;
  }
  return false;
});

console.log(uniqueArray);
  • 优点:逻辑清晰,支持自定义去重规则,Map的键可以是任意类型(若需用对象本身作为键,需注意引用问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:35:32