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

如何查找数组中的唯一元素与重复元素?JavaScript实现代码

如何查找数组中的唯一元素与重复元素(JavaScript实现)

核心思路

要区分数组中的唯一元素(仅出现一次)和重复元素(出现多次),核心是统计每个元素的出现次数:

  • 重复元素:筛选出出现次数大于1的元素(注意去重,避免重复输出同一元素)
  • 唯一元素:筛选出出现次数恰好为1的元素

实现代码

1. 获取去重后的重复元素

以下两种方法适用于大多数基础类型(数字、字符串、布尔值)的数组:

方法一:使用普通对象统计次数
function getDuplicates(arr) {
  const countMap = {};
  const duplicates = [];
  
  // 统计每个元素出现次数
  for (const item of arr) {
    countMap[item] = (countMap[item] || 0) + 1;
  }
  
  // 筛选出现次数>1的元素
  for (const key in countMap) {
    if (countMap[key] > 1) {
      // 还原元素类型(对象键默认是字符串)
      duplicates.push(isNaN(Number(key)) ? key : Number(key));
    }
  }
  
  return duplicates;
}

// 示例:
console.log(getDuplicates([1, 2, 2, 3, 3, 3, 4])); // 输出 [2, 3]
方法二:使用Map统计(更友好处理非字符串键)
function getDuplicates(arr) {
  const countMap = new Map();
  
  arr.forEach(item => {
    countMap.set(item, (countMap.get(item) || 0) + 1);
  });
  
  // 筛选并返回重复元素
  return [...countMap.keys()].filter(key => countMap.get(key) > 1);
}

// 示例:
console.log(getDuplicates(['a', 'b', 'b', 'c', 'a'])); // 输出 ['a', 'b']

2. 获取唯一元素

方法一:对象统计法
function getUniqueElements(arr) {
  const countMap = {};
  const uniqueElements = [];
  
  for (const item of arr) {
    countMap[item] = (countMap[item] || 0) + 1;
  }
  
  for (const key in countMap) {
    if (countMap[key] === 1) {
      uniqueElements.push(isNaN(Number(key)) ? key : Number(key));
    }
  }
  
  return uniqueElements;
}

// 示例:
console.log(getUniqueElements([1, 2, 2, 3, 4, 4])); // 输出 [1, 3]
方法二:数组filter结合indexOf/lastIndexOf(简单但性能较低)

这种方法无需额外统计,但时间复杂度为O(n²),适合小型数组:

function getUniqueElements(arr) {
  return arr.filter(item => arr.indexOf(item) === arr.lastIndexOf(item));
}

// 示例:
console.log(getUniqueElements(['x', 'y', 'x', 'z'])); // 输出 ['y', 'z']

注意事项

  • 如果数组包含复杂类型(如对象、数组),上述方法无法直接使用,需要自定义比较逻辑(比如对比对象的特定属性,或者实现深度相等判断)。
  • 大数据量场景下,优先选择Map/对象统计的方法(O(n)时间复杂度),避免使用filter结合indexOf的方法(O(n²)时间复杂度)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:20:54