indexof和lastindexof

admin 18 0

**深入理解JavaScript中的indexOf和lastIndexOf方法**

在JavaScript中,`indexOf`和`lastIndexOf`是两个常用的字符串和数组方法,用于查找特定元素或子字符串在目标字符串或数组中的位置,这两个方法在处理文本和数组数据时非常有用,特别是在需要确定某个元素或子字符串是否存在,或者需要找到其出现位置的情况下。

### 1. indexOf方法

`indexOf`方法返回指定元素(或子字符串)在字符串或数组中首次出现的位置的索引,如果未找到该元素,则返回-1。

#### 1.1 字符串中的indexOf

在字符串中,`indexOf`方法用于查找一个子字符串首次出现的位置,其基本语法如下:

str.indexOf(searchValue[, fromIndex])

* `searchValue`:必需,要查找的子字符串。

* `fromIndex`:可选,开始查找的位置,如果省略该参数,则从字符串的开始位置进行查找,如果`fromIndex`大于或等于字符串的长度,则始终返回-1,表示未找到子字符串。

let str = "Hello, world!";
let index = str.indexOf("world"); // 返回 7
let index2 = str.indexOf("Java"); // 返回 -1
let index3 = str.indexOf("o", 5); // 从索引5开始查找,返回 7

#### 1.2 数组中的indexOf

在数组中,`indexOf`方法用于查找一个元素首次出现的位置,其基本语法与字符串中的`indexOf`方法类似:

arr.indexOf(searchElement[, fromIndex])

* `searchElement`:必需,要查找的元素。

* `fromIndex`:可选,开始查找的位置,如果省略该参数,则从数组的开始位置进行查找,如果`fromIndex`大于或等于数组的长度,则始终返回-1,表示未找到元素。

let arr = [1, 2, 3, 4, 5, 4, 6];
let index = arr.indexOf(4); // 返回 3
let index2 = arr.indexOf(7); // 返回 -1
let index3 = arr.indexOf(4, 4); // 从索引4开始查找,返回 5

### 2. lastIndexOf方法

与`indexOf`方法类似,`lastIndexOf`方法也用于查找指定元素(或子字符串)在字符串或数组中的位置,但不同的是,`lastIndexOf`方法返回的是最后一次出现的位置的索引,如果未找到该元素,则返回-1。

#### 2.1 字符串中的lastIndexOf

在字符串中,`lastIndexOf`方法用于查找一个子字符串最后一次出现的位置,其基本语法与`indexOf`方法相同:

str.lastIndexOf(searchValue[, fromIndex])

但需要注意的是,`fromIndex`参数在`lastIndexOf`方法中的行为略有不同,如果`fromIndex`大于或等于字符串的长度,则`lastIndexOf`会从字符串的末尾开始向前查找,如果`fromIndex`小于0,则`lastIndexOf`会将其视为0,并从字符串的开始位置进行查找。

let str = "Hello, world! world";
let index = str.lastIndexOf("world"); // 返回 13
let index2 = str.lastIndexOf("Java"); // 返回 -1
let index3 = str.lastIndexOf("o", 5); // 从索引5开始向前查找,返回 4
let index4 = str.lastIndexOf("o", 20); // 从索引20开始向前查找,返回 16

#### 2.2 数组中的lastIndexOf

在数组中,`lastIndexOf`方法也用于查找一个元素最后一次出现的位置,其基本语法与字符串中的`lastIndexOf`方法相同:

arr.lastIndexOf(searchElement[, fromIndex])

同样地,`fromIndex`参数在`lastIndexOf`方法中的行为也略有不同,如果`fromIndex`大于或等于数组的长度,则`lastIndexOf`会从数组的末尾开始向前查找,如果`fromIndex`小于0,则`lastIndexOf`会将其视为-1,并从数组的末尾开始向前查找。

let arr = [1, 2, 3, 4, 5, 4, 6, 4];
let index = arr.lastIndexOf(4); // 返回 7
let index2 = arr.lastIndexOf(7); // 返回 -1
let index3 = arr.lastIndexOf(4, 5); // 从索引5开始向前查找,返回 3
let index4 = arr.lastIndexOf(4, 10); // 从索引10开始向前查找,返回 7