为何这段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
相关产品推荐
相关产品推荐

