JS 中数组查找 findIndex 和 indexOf 的差别

最近遇到一个问题,某个地方有错误,经排查是 findIndex 和 indexOf 函数错误使用的问题,记录一下。

indexOf 和 findIndex 都是数组方法,用于查找元素在数组中的索引。

indexOf

indexOf 方法返回数组中第一个元素的索引,如果找不到则返回 -1。它使用严格相等 (===) 进行比较。

const arr = [1, 2, 3, 4, 5];
console.log(arr.indexOf(3)); // 2
console.log(arr.indexOf(6)); // -1

findIndex

findIndex 方法返回数组中第一个元素的索引,如果找不到则返回 -1。它使用回调函数进行比较,可以实现更复杂的查找逻辑。

const arr = [1, 2, 3, 4, 5];
console.log(arr.findIndex(x => x > 3)); // 3
console.log(arr.findIndex(x => x > 5)); // -1

在这里插入图片描述

总结

indexOf 适用于简单的值查找,使用严格相等进行比较。

findIndex 适用于复杂的查找逻辑,使用回调函数进行比较。

简单的查找(无重复的字符串和数字),选择 indexOf 。

复杂的查找(数组嵌套对象或者数组),选择 findIndex 。

问题反思

上面的理论看起来很简单,也不容易犯错,我遇到的情况是:

某个数据结构,数组内部每一项是对象。

早期使用 findIndex 进行查询:某些情况下,查询时对象的属性不变,那么 Index 可以找到,正确。某些情况下,查询时对象属性变化了,那么 findIndex 使用 === 进行比较,就找不到原来的对象。

页面的现象是:问题不稳定复现,需要一定时间才查出问题。

修改

使用 findIndex 查找,当 object.id 相等时返回 Index。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值