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

编写getDuplicates函数遇问题:重复元素返回结果不符合预期

问题排查与修复

原代码的核心问题

  1. 数组全等判断无效:items === [0,0,0,0]永远不会成立。数组是引用类型,===比较的是内存地址而非内容,哪怕两个数组内容完全一致,这个判断也不会触发。
  2. 重复添加元素:双重循环中每找到一对重复元素就往result里push一次,导致同一个元素被多次添加。比如输入[0,0,0,0]时,会触发6次push操作,最终得到6个0的数组。
  3. 缺少去重逻辑:没有机制保证同一元素只在结果数组中出现一次。

修复后的代码方案

以下两种实现都能满足「返回出现多次的元素、保留原顺序、同一元素仅返回一次」的要求:

方案一:遍历过程中实时判断(高效)

function getDuplicates(items) {
  const result = [];
  const seen = new Set(); // 记录已经遍历过的元素
  const added = new Set(); // 记录已经加入结果的元素

  for (const item of items) {
    if (seen.has(item)) {
      // 元素已出现过,且未加入结果时才添加
      if (!added.has(item)) {
        result.push(item);
        added.add(item);
      }
    } else {
      seen.add(item);
    }
  }

  return result;
}

方案二:先统计次数再筛选(直观)

function getDuplicates(items) {
  const countMap = new Map();
  // 第一步:统计每个元素的出现次数
  for (const item of items) {
    countMap.set(item, (countMap.get(item) || 0) + 1);
  }

  const result = [];
  const added = new Set();
  // 第二步:按原数组顺序筛选出出现次数>1的元素,且仅添加一次
  for (const item of items) {
    if (countMap.get(item) > 1 && !added.has(item)) {
      result.push(item);
      added.add(item);
    }
  }

  return result;
}

测试验证

输入[0,0,0,0]时,两种方案都会返回[0];输入[1,2,2,3,3,3,4]时,会返回[2,3],完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:56:34