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

如何在JavaScript中查找数组内对象的重复属性值并实现去重返回?

如何对数组中对象的指定属性去重?

嘿,这个需求在日常开发里挺常见的,我给你分享几种实用的解决方案,适合不同场景:

方法一:利用Set + filter(性能最优)

这种方法借助Set的O(1)查找特性,处理大数据量时效率很高,而且代码简洁:

const array = [{ a:"cat"}, { a:"dog"}, { a:"dog"},{ a:"dog"}];
// 用Set记录已经出现过的属性值
const seenValues = new Set();
// 过滤数组,只保留首次出现的元素
const uniqueArray = array.filter(item => {
  if (!seenValues.has(item.a)) {
    seenValues.add(item.a);
    return true;
  }
  return false;
});

console.log(uniqueArray); // 输出: [{ a: "cat" }, { a: "dog" }]

原理很简单:遍历数组时,先检查当前元素的a值是否已经在Set里,没出现过就把它加入Set并保留这个元素,已经出现过的直接过滤掉。

方法二:利用reduce方法

如果你更喜欢用数组的reduce方法来做累加处理,也可以这样写:

const array = [{ a:"cat"}, { a:"dog"}, { a:"dog"},{ a:"dog"}];
const uniqueArray = array.reduce((accumulator, current) => {
  // 检查累加器里是否已经存在相同a值的元素
  const isDuplicate = accumulator.some(item => item.a === current.a);
  if (!isDuplicate) {
    accumulator.push(current);
  }
  return accumulator;
}, []);

console.log(uniqueArray); // 同样得到去重后的数组

不过要注意:some方法每次都会遍历累加器数组,当原数组很大时,性能会比Set方法差一些,适合小数据量的场景。

方法三:封装成通用函数(灵活复用)

如果以后你需要对不同属性做去重,可以把逻辑封装成一个通用函数,这样复用起来更方便:

/**
 * 根据指定属性对对象数组去重
 * @param {Array} arr - 要处理的数组
 * @param {String} prop - 用来判断重复的属性名
 * @returns {Array} 去重后的数组
 */
function uniqueByProperty(arr, prop) {
  const seen = new Set();
  return arr.filter(item => {
    const value = item[prop];
    if (!seen.has(value)) {
      seen.add(value);
      return true;
    }
    return false;
  });
}

// 使用示例
const array = [{ a:"cat"}, { a:"dog"}, { a:"dog"},{ a:"dog"}];
const uniqueArray = uniqueByProperty(array, 'a');
console.log(uniqueArray);

以后要对b属性去重,直接调用uniqueByProperty(arr, 'b')就行,非常灵活。

额外场景:只需要去重后的属性值

如果你不需要保留原对象,只需要a属性的去重值集合,可以更简单:

const array = [{ a:"cat"}, { a:"dog"}, { a:"dog"},{ a:"dog"}];
const uniqueValues = [...new Set(array.map(item => item.a))];

console.log(uniqueValues); // 输出: ["cat", "dog"]

直接用map提取所有a值,再通过Set去重,最后扩展成数组就行。

这些方法应该能覆盖你大部分的需求啦,根据实际场景选最合适的就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:57:37