如何理解JavaScript代码中arr.indexOf(val)===index的比较逻辑?
理解数组去重逻辑:
arr.indexOf(val)===index 这段代码的核心是用filter结合indexOf实现数组去重,咱们拆解arr.indexOf(val)===index的逻辑:
先明确关键方法/参数的作用
arr.filter():遍历原数组的每个元素,对每个元素执行回调函数,只有回调返回true的元素会被放进新数组。- 回调里的
val是当前遍历到的元素,index是这个元素在原数组中的当前下标。 arr.indexOf(val):返回val在原数组中第一次出现的下标,不管后面有多少重复项,只找第一个匹配的位置。
比较逻辑的本质
arr.indexOf(val) === index的意思是:当前元素的下标,等于它在原数组里第一次出现的下标。- 对于第一次出现的元素:它的当前下标就是第一次出现的下标,等式成立,返回
true,会被保留到新数组。 - 对于重复出现的元素:它的当前下标肯定比第一次出现的下标大,等式不成立,返回
false,会被filter过滤掉。
- 对于第一次出现的元素:它的当前下标就是第一次出现的下标,等式成立,返回
用原数组逐个验证
原数组是[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,过滤
- 下标0的元素1:
最终得到的去重数组就是[1,4,5,6,3,2],和代码运行结果一致。
内容的提问来源于stack exchange,提问作者Swati
相关产品推荐
相关产品推荐

