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

使用ES6技术找出字符串数组中的重复元素

找出数组中重复元素的解决方案

原代码的问题

你的代码逻辑存在几个关键问题:

  • 仅对比相邻元素:原代码通过arr[i+1] == arr[i]判断重复,但数组中的重复元素并非都相邻(比如第一个'Ash'和第三个'Ash'),因此无法检测到这类非相邻的重复项。
  • 会重复添加相同元素:即使相邻元素重复(比如索引3和4的'Ash'),代码会多次将其推入结果数组,导致结果出现重复值。
  • 全局变量污染:duplicate是全局变量,多次调用函数时会保留之前的结果,引发逻辑错误。

推荐方案

方案1:使用Map统计元素出现次数

通过统计每个元素的出现次数,筛选出出现次数≥2的元素,同时保证结果数组无重复:

function duplicateValues(arr) {
  const countMap = new Map();
  const duplicates = [];
  
  // 统计每个元素的出现次数
  for (const item of arr) {
    countMap.set(item, (countMap.get(item) || 0) + 1);
  }
  
  // 筛选出现次数大于1的元素
  for (const [item, count] of countMap) {
    if (count > 1) {
      duplicates.push(item);
    }
  }
  
  return duplicates;
}

const arr = ['Ash', 'Bob', 'Jarvis', 'Ash', 'Ash', 'Dylan', 'Bob', 'Dylan','Tom', 'John'];
console.log(duplicateValues(arr)); // 输出: ['Ash', 'Bob', 'Dylan']

方案2:使用Set结合filter(更简洁)

利用Set的唯一性,通过遍历判断元素是否在之前出现过,同时记录已出现的元素,避免重复添加:

function duplicateValues(arr) {
  const seen = new Set();
  const duplicates = new Set();
  
  for (const item of arr) {
    if (seen.has(item)) {
      duplicates.add(item);
    } else {
      seen.add(item);
    }
  }
  
  return Array.from(duplicates);
}

const arr = ['Ash', 'Bob', 'Jarvis', 'Ash', 'Ash', 'Dylan', 'Bob', 'Dylan','Tom', 'John'];
console.log(duplicateValues(arr)); // 输出: ['Ash', 'Bob', 'Dylan']

方案3:双重循环(基础思路,适合理解原理)

通过两层循环对比元素,同时用额外数组记录已加入结果的元素,避免重复:

function duplicateValues(arr) {
  const duplicates = [];
  
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] === arr[j] && !duplicates.includes(arr[i])) {
        duplicates.push(arr[i]);
        break; // 找到一个重复就跳出内层循环,避免重复添加
      }
    }
  }
  
  return duplicates;
}

const arr = ['Ash', 'Bob', 'Jarvis', 'Ash', 'Ash', 'Dylan', 'Bob', 'Dylan','Tom', 'John'];
console.log(duplicateValues(arr)); // 输出: ['Ash', 'Bob', 'Dylan']

说明

  • 方案1和方案2的时间复杂度为O(n),效率更高,适合处理大型数组;
  • 方案3的时间复杂度为O(n²),仅适合小型数组,主要用于理解基础逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:20:20