Skip to content

搜索数组

搜索数组的方法有:indexOf()lastIndexOf()find()findIndex()includes()

indexOf()

indexOf()方法在数组中从前往后搜索,找到第一个匹配的元素就返回其索引。如果不存在,则返回-1。

ts
const resOfIndex = arr.indexOf("banana");

indexOf()方法还可以接受第二个参数,如果是正数,则表示从第几个元素开始从前往后搜索。

ts
const resOfIndexForwards = arr.indexOf("banana", 2);

第二个参数可以是负数,表示从倒数第几个元素开始搜索(length - fromIndex)。

ts
const resOfIndexBackwards = arr.indexOf("banana", -2);

lastIndexOf()

lastIndexOf()方法在数组中从后往前搜索,找到 第一个匹配(最后一个索引) 的元素就返回其索引。如果不存在,则返回-1。

ts
const resOfLastIndex = arr.lastIndexOf("banana");

lastIndexOf()方法还可以接受第二个参数,如果是正数,则表示从第几个元素开始从后往前搜索。

ts
const resOfLastForwards = arr.lastIndexOf("banana", 2);

第二个参数可以是负数,表示从倒数第几个元素开始搜索(length - fromIndex)。

ts
const resOfLastBackwards = arr.lastIndexOf("banana", -2);

find()

find()方法返回数组中第一个匹配的元素。如果没有找到匹配的元素,则返回 undefined

ts
const resOfFind = arr.find((item, index, obj) => {
  return item === "banana";
});

findIndex()

findIndex()方法返回数组中第一个匹配的元素的索引。如果没有找到匹配的元素,则返回 -1。

ts
const resOfFindIndex = arr.findIndex((item, index, obj) => {
  return item === "banana";
});

includes()

includes()方法返回一个布尔值,表示数组中是否包含指定的值。

ts
const resOfIncludes = arr.includes("banana");

includes()方法还可以接受第二个参数,表示从第几个元素开始搜索。

ts
const resOfIncludesForwards = arr.includes("banana", 2);

第二个参数可以是负数,表示从倒数第几个元素开始搜索(length - fromIndex)。

ts
const resOfIncludesBackwards = arr.includes("banana", -2);
搜索数组的比较算法差异

TIP

indexOf()lastIndexOf()方法都是使用严格相等运算符(===)来比较元素的,而includes()方法则是使用SameValueZero算法来比较元素的。

因此,indexOf()lastIndexOf()方法无法区分NaN,而includes()方法可以。

ts
const resOfIndexOfNaN = arr.indexOf(NaN); // -1
const resOfIncludesNaN = arr.includes(NaN); // true