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

JavaScript中for of循环正常生效但普通for循环失效的原因

《存在重复元素》普通for循环运行错误排查

两种循环写法结果不一致和JS循环语法本身无关,核心错误是普通for循环中混淆了数组索引和数组元素值。

  • for...of 循环的遍历变量直接拿到数组每一项的元素值:循环中i依次等于nums[0]、nums[1]...nums[nums.length-1],完全匹配“判断元素是否重复”的逻辑,因此可以正常提交通过。
  • 你写的普通for循环中,变量i是从0开始逐次递增的数组下标,不是元素值。你全程调用set.has(i)、set.add(i)操作的都是索引,根本没有读取数组里存的实际内容,逻辑完全偏离题目要求,自然会返回错误结果。索引本身是从0开始的连续不重复整数,大部分场景下你的代码会直接遍历到结尾返回false,完全检测不到元素的重复情况。

修正后的普通for循环代码

只需要把操作对象从索引i换成索引对应的元素值nums[i],普通for循环写法一样可以通过所有测试用例:

var containsDuplicate = function(nums) {
    let set = new Set()
    for (let i = 0; i < nums.length; i++) {
        if (!set.has(nums[i])) {
            set.add(nums[i]) 
        } else {
            return true
        }
    }
    return false
};

错误复现示例:传入测试用例nums = [5,5]时
错误写法的执行逻辑:i依次为0、1,Set先后存入0、1,遍历结束返回false,和正确结果true完全相悖
正确写法的执行逻辑:先后取到元素值5、5,第一次存入5,第二次检测到5已存在,直接返回true


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:39:38