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

LeetCode 2634:数组过滤代码中Number()的作用疑问

为什么这段数组过滤代码必须用Number()转换索引?

核心原因很简单:用for...in遍历数组时,拿到的索引i是字符串类型,不是你以为的数字。

数组本质是特殊的对象,它的索引(0、1、2这些)在对象层面是字符串形式的键名。你可以在循环里加一句console.log(typeof i)验证,输出肯定是string,而不是number。

举个实际场景,假设你传入的过滤函数fn是这样的:

function keepItem(item, index) {
  // 期望索引是数字,判断是否等于1
  return index === 1;
}

如果不用Number(i),传给index的是字符串"1",此时"1" === 1的结果是false,对应元素根本不会被加入过滤数组;而用Number(i)把字符串转成数字1后,判断逻辑才会正常生效。

很多时候我们写的过滤逻辑(包括数组内置的filter方法回调)都期望索引是数字类型,所以必须通过Number()把for...in拿到的字符串索引转换成数字,否则就会因为类型不匹配导致逻辑失效。

另外提一句:遍历数组尽量别用for...in,它本来是为遍历普通对象设计的,可能会遍历到数组原型上的额外属性,推荐用for...of、普通for循环,或者直接用Array.filter方法更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:36:00