数组:indexOf和lastIndexOf方法

array.indexOf()array.lastIndexOf() 是 JavaScript 中用于查找数组中某个元素位置的两个方法。它们的功能类似,但搜索的方向不同。
 

1. array.indexOf()

功能:
  • 从数组的开头开始搜索,返回第一个匹配到的元素的索引。
  • 如果没有找到目标元素,则返回 -1
语法:
array.indexOf(searchElement, fromIndex)
  • searchElement:要查找的元素。
  • fromIndex(可选):从哪个索引开始搜索。如果省略,默认从索引 0 开始。
示例:
查找元素:
let arr = [1, 2, 3, 4, 3];
console.log(arr.indexOf(3)); // 输出: 2 (第一次出现 3 的索引)
console.log(arr.indexOf(5)); // 输出: -1 (没有找到 5)
使用 fromIndex 参数:
let arr = [1, 2, 3, 4, 3];
console.log(arr.indexOf(3, 3)); // 输出: 4 (从索引 3 开始查找,找到第二个 3)
查找对象或复杂值:
let arr = [{ id: 1 }, { id: 2 }, { id: 3 }];
console.log(arr.indexOf({ id: 2 })); // 输出: -1 (对象是引用类型,不会匹配)

注意:indexOf 使用的是严格相等 (===) 比较,因此对于对象或复杂值,需要特别注意。

2. array.lastIndexOf()

功能:
  • 从数组的末尾开始搜索,返回最后一个匹配到的元素的索引。
  • 如果没有找到目标元素,则返回 -1
语法:
array.lastIndexOf(searchElement, fromIndex)
  • searchElement:要查找的元素。
  • fromIndex(可选):从哪个索引开始搜索(向左搜索)。如果省略,默认从数组的最后一个元素开始。
示例:
查找元素:
let arr = [1, 2, 3, 4, 3];
console.log(arr.lastIndexOf(3)); // 输出: 4 (最后一次出现 3 的索引)
console.log(arr.lastIndexOf(5)); // 输出: -1 (没有找到 5)
使用 fromIndex 参数:
let arr = [1, 2, 3, 4, 3];
console.log(arr.lastIndexOf(3, 3)); // 输出: 2 (从索引 3 开始向左查找,找到第一个 3)
对象查找:
let arr = [{ id: 1 }, { id: 2 }, { id: 3 }];
console.log(arr.lastIndexOf({ id: 2 })); // 输出: -1 (对象是引用类型,不会匹配)

对比总结:

特性array.indexOf()array.lastIndexOf()
搜索方向从数组开头向右搜索从数组末尾向左搜索
是否修改原数组
返回值第一个匹配元素的索引,未找到时返回 -1最后一个匹配元素的索引,未找到时返回 -1
语法array.indexOf(searchElement, fromIndex)array.lastIndexOf(searchElement, fromIndex)

注意事项:

  1. 严格比较:

    • indexOf 和 lastIndexOf 都使用严格相等 (===) 进行比较。
    • 因此,对于对象、数组或函数等引用类型的值,它们不会匹配,除非是同一个引用。
let obj = { id: 1 };
let arr = [obj, { id: 2 }];
console.log(arr.indexOf(obj)); // 输出: 0 (因为引用相同)
console.log(arr.indexOf({ id: 1 })); // 输出: -1 (新创建的对象引用不同)

区分 -0+0

  • 在 JavaScript 中,-0 和 +0 被视为严格相等,因此 indexOf 和 lastIndexOf 无法区分它们。
let arr = [-0, +0];
console.log(arr.indexOf(-0)); // 输出: 0 (匹配到第一个 0)
console.log(arr.lastIndexOf(+0)); // 输出: 1 (匹配到最后一个 0)

NaN 的特殊处理:

  • NaN 不等于自身,因此即使数组中包含 NaNindexOf 和 lastIndexOf 也无法找到它。
let arr = [1, NaN, 3];
console.log(arr.indexOf(NaN)); // 输出: -1
console.log(arr.lastIndexOf(NaN)); // 输出: -1

如果需要查找 NaN,可以结合 findIndex 方法:

let arr = [1, NaN, 3];
console.log(arr.findIndex(value => Number.isNaN(value))); // 输出: 1

适用场景:

  1. array.indexOf()

    • 当你需要找到某个元素在数组中的第一次出现位置时。
  2. array.lastIndexOf()

    • 当你需要找到某个元素在数组中的最后一次出现位置时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值