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

如何理解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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 11:15:10