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

为何Array.filter()的无参回调能移除稀疏数组中的空位?

无参filter(() => true)移除稀疏数组空位的原理

首先得搞清楚:JavaScript稀疏数组里的空位(empty slots)≠ undefined,空位是数组中从未被初始化的位置,和显式赋值undefined的元素完全是两回事。

filter方法的底层逻辑决定了它会自动跳过空位:

  • filter只会遍历数组中实际存在元素的索引,直接忽略那些空位对应的索引。
  • 对于每个被遍历到的元素,它会执行你传入的回调函数,只要回调返回true,就把这个元素保留到新数组里。

回到你的例子:
原数组let sparse = [5, , 3, , 1]里,索引0、2、4是有值的,索引1、3是空位。filter遍历的时候压根不会碰这两个空位,只处理0、2、4的元素,而你的回调() => true永远返回true,所以这些元素全被保留,最终得到的新数组就是[5, 3, 1]。

额外提一句:如果数组里是显式写的undefined(比如[5, undefined, 3]),filter(() => true)会把这个undefined也保留下来,因为它是一个实际存在的元素,不是空位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:22:01