findIndex 是 JavaScript 数组方法,用于返回第一个满足条件元素的索引,未找到则返回 -1;它支持复杂判断逻辑,比 indexOf 更灵活高效,且不修改原数组。

findIndex 是 JavaScript 数组原生方法,专门用于查找**第一个满足条件的元素索引**,找到即返回索引值,没找到返回 -1。它比手动 for 循环更简洁,也比先 find 再 indexOf 更高效(避免二次遍历)。
基本用法:传入判断函数
语法:arr.findIndex(callback(element[, index[, array]])[, thisArg])
核心是提供一个回调函数,对每个元素执行判断,返回 布尔值 true/false:
- 第一次返回
true时,立即返回当前元素的索引 - 全程无匹配,返回
-1 - 不修改原数组,纯查找
常见定位场景示例
找某个具体值的索引(严格相等)
const arr = ['apple', 'banana', 'cherry']; const idx = arr.findIndex(item => item === 'banana'); // 返回 1
找对象中某个属性符合条件的索引
const users = [
{ id: 101, name: 'Alice' },
{ id: 205, name: 'Bob' },
{ id: 307, name: 'Charlie' }
];
const idx = users.findIndex(u => u.id === 205); // 返回 1
结合数值条件(如大于某值)
const numbers = [4, 8, 15, 16, 23, 42]; const idx = numbers.findIndex(n => n > 10); // 返回 2(第一个大于 10 的是 15)
注意边界情况
- 空数组调用
findIndex→ 返回-1 - 回调函数未显式返回值(即返回
undefined)→ 视为false - 若需查找 最后一个 匹配项,不能用
findIndex,应改用findLastIndex(ES2023+)或反向遍历 - 不支持 IE 浏览器,旧环境需 polyfill 或降级为 for 循环
和 indexOf 的区别在哪
indexOf 只能做**严格相等(===)比较**,无法处理对象、条件逻辑或 NaN:
-
[NaN].indexOf(NaN)返回-1,但[NaN].findIndex(x => x !== x)返回0 -
indexOf查对象必须引用相同;findIndex可按属性查,更灵活 - 两者都只返回第一个匹配,但
findIndex表达能力更强


















