如何理解arr.filter((_, idx) => idx % 2 === 0)中的(_, idx)参数?
代码整体逻辑说明
这段是JavaScript数组过滤的常用写法,最终会返回一个全新的数组,仅保留原数组中处于偶数索引位置的元素(因数组索引从0开始计数,实际保留的是第1、3、5…个位置的元素)。
(_, idx)的具体含义 这个写法对应两个通用的JS编码规则:
Array.filter()方法的回调函数由方法内部固定传入参数,参数顺序为:当前遍历到的元素值、当前元素的索引、被遍历的原数组。- 由于这段逻辑完全不需要读取当前元素的具体值,只需要用索引做判断,因此按照社区通用约定,用下划线
_作为刻意不使用的参数的占位符:它的作用仅仅是占住第一个参数的位置,向代码阅读者传递“这个位置存在传入值,但我完全不会用到它”的信号。 - 第二个形参
idx是实际参与逻辑判断的变量,承接当前遍历元素的索引值,后续判断idx % 2 === 0就是用来筛选出索引能被2整除的位置的元素。
常见易混点
很多新手会疑惑:既然第一个参数完全不用,为什么不把回调简写成(idx) => idx % 2 === 0?
因为形参的接收顺序完全匹配方法内部传值的顺序:如果回调只写一个形参,接住的内容就会是当前遍历的元素本身,根本拿不到索引值——索引固定在第二个传值位置,因此哪怕第一个参数完全不使用,也必须为它预留位置,否则会直接出现逻辑错误。
这种用
_做未使用参数占位的写法是JS生态的通用约定,在其他支持多参数回调的场景(比如数组的map、forEach,DOM事件监听回调等)中都适用,只要某个参数位置不需要用到,都可以用_占位,降低代码阅读时的识别成本。
内容的提问来源于stack exchange,提问作者Lourenco Matalonga
相关产品推荐
相关产品推荐

