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

如何理解JavaScript代码中arr.indexOf(val)===index的比较逻辑?

理解数组去重逻辑:arr.indexOf(val)===index

这段代码的核心是用filter结合indexOf实现数组去重,咱们拆解arr.indexOf(val)===index的逻辑:

  1. 先明确关键方法/参数的作用

    • arr.filter():遍历原数组的每个元素,对每个元素执行回调函数,只有回调返回true的元素会被放进新数组。
    • 回调里的val是当前遍历到的元素,index是这个元素在原数组中的当前下标。
    • arr.indexOf(val):返回val在原数组中第一次出现的下标,不管后面有多少重复项,只找第一个匹配的位置。
  2. 比较逻辑的本质
    arr.indexOf(val) === index的意思是:当前元素的下标,等于它在原数组里第一次出现的下标。

    • 对于第一次出现的元素:它的当前下标就是第一次出现的下标,等式成立,返回true,会被保留到新数组。
    • 对于重复出现的元素:它的当前下标肯定比第一次出现的下标大,等式不成立,返回false,会被filter过滤掉。
  3. 用原数组逐个验证
    原数组是[1,4,5,6,3,2,1,6]:

    • 下标0的元素1:indexOf(1)返回0 → 0===0,保留
    • 下标1的元素4:indexOf(4)返回1 → 1===1,保留
    • 下标2的元素5:indexOf(5)返回2 → 2===2,保留
    • 下标3的元素6:indexOf(6)返回3 → 3===3,保留
    • 下标4的元素3:indexOf(3)返回4 →4===4,保留
    • 下标5的元素2:indexOf(2)返回5 →5===5,保留
    • 下标6的元素1:indexOf(1)返回0 →6≠0,过滤
    • 下标7的元素6:indexOf(6)返回3 →7≠3,过滤

最终得到的去重数组就是[1,4,5,6,3,2],和代码运行结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:35:00