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

为何这段JavaScript数组去重代码能够生效?

理解arr.indexOf(item) === index实现数组去重的原理

先拆解这段代码里的两个核心方法,再看条件为什么能实现去重:

1. 先搞懂两个关键方法

  • filter():数组的filter方法会遍历数组每一项,把符合测试条件(返回true)的元素保留下来,组成新数组返回。
  • indexOf(item):这个方法会返回数组中第一个和item严格相等(===)的元素的索引位置。如果找不到匹配项,返回-1。

2. 核心条件的逻辑分析

arr.indexOf(item) === index的本质是:判断当前元素是不是它在数组中第一次出现的实例。

举个实际例子,比如数组[2, 4, 4, 6, 6, 6]:

  • 遍历第一个2,索引是0,arr.indexOf(2)返回0,0===0 → 条件成立,保留这个2。
  • 遍历第一个4,索引是1,arr.indexOf(4)返回1 → 条件成立,保留。
  • 遍历第二个4,索引是2,arr.indexOf(4)还是返回1(因为它只会找第一个匹配的位置),1≠2 → 条件不成立,这个4被剔除。
  • 第一个6索引是3,arr.indexOf(6)返回3 → 保留;后面的6索引是4、5,arr.indexOf(6)始终是3,条件不成立,全部被剔除。

这样筛选下来,数组里只会留下每个元素第一次出现的版本,自然就实现了去重。

补充说明

这个方法的优势是能保留元素的原始顺序,但有个局限:如果数组里是引用类型(比如对象、数组),因为indexOf用的是严格相等比较,两个内容相同但引用不同的对象会被判定为不相等,所以无法对这类元素去重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:22:04