为什么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
相关产品推荐
相关产品推荐

