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

整数数组重复值校验功能使用forEach语法实现失效问题咨询

ES6 风格实现数组重复值判断方案

Array.prototype.forEach 原生不支持提前终止遍历,不适合需要中途退出的判断场景,以下是两种符合ES6规范、语义清晰的实现方式:

方案1:极简实现(基于Set特性)

直接利用ES6 Set 自动去重的特性对比长度,代码最简洁:

const containsDuplicate = nums => new Set(nums).size !== nums.length;

逻辑说明:Set实例会自动过滤传入数组的重复元素,若去重后的元素数量与原数组长度不一致,即可判定存在重复值。该写法适合绝大多数普通业务场景。

方案2:支持提前终止的实现(基于Array.some + Set)

如果需要遇到第一个重复值就立刻终止遍历,减少不必要的遍历开销,可以用Array.some方法,该方法只要匹配到第一个符合条件的元素就会自动中断遍历:

const containsDuplicate = (nums) => {
  const seen = new Set();
  return nums.some(num => {
    if (seen.has(num)) return true;
    seen.add(num);
    return false;
  });
};

逻辑说明:使用ES6 Set作为存储已遍历元素的集合,相比普通对象的in判断不会存在属性名隐式类型转换的问题,语义更清晰,运行效率更高。

注:不建议使用抛异常的方式强行中断forEach遍历,该写法属于hack实现,会破坏代码可读性,也会带来额外的异常处理开销,完全没有必要使用。

内容的提问来源于stack exchange,提问作者Davi Cheli Miquelim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:24:02