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

为什么Array.findIndex方法没有返回第一个匹配到的元素?

问题原因分析

你对findIndex的核心误解在回调函数的返回值规则上:

  • Array.findIndex()会遍历数组,对每个元素执行你传入的回调函数,只要回调返回真值(Boolean转换后为true的值),就立刻停止遍历,返回当前元素的索引;如果所有元素回调都返回假值,最终返回-1。
  • 你的回调里满足条件时直接返回了index:
    当匹配到索引0的元素时,你返回的是数字0,JS会把0隐式转换为布尔值false,findIndex会认为当前元素不匹配,继续遍历下一个元素
    当匹配到索引1的元素时,你返回的是数字1,隐式转换为布尔值true,findIndex就认为匹配成功,返回1,这就是你得到错误结果的原因。
修正方案

把回调的返回值改成布尔值即可,修改后的代码如下:

function findLower(element, index, tarray) {
  if (current_value >= element) {
    console.log("elected", element)
    // 直接返回true表示匹配成功,findIndex会自动返回当前索引
    return true
  }
}
const current_value = 15
const ordered_radiuses = [0, 1, 2, 3, 4, 5, 10, 15, 20, 25, 30]
const lower_index = ordered_radiuses.findIndex(findLower)
console.log("lower index", lower_index)

修改后运行输出和你预期完全一致:

elected 0
lower index 0

内容的提问来源于stack exchange,提问作者Itération 122442

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:09:02