JavaScript indexOf和findIndex函数的区别

JavaScript indexOf和findIndex函数的区别

JavaScript是一种动态编程语言,可以用于客户端和服务器端。JavaScript用于创建交互式网页。它有许多框架,如React JS、Angular JS、Node JS等。JavaScript提供了一些方法,可以获取指定元素的索引。indexOf和findIndex就是其中的两种方法。

JavaScript中的indexOf函数

JavaScript中的indexOf函数允许我们在数组中搜索一个元素,并返回该元素在数组中的第一个找到的索引。如果找不到该元素,则返回-1。该方法的语法如下所示:

array.indexOf(element, index)

在这里,array是执行indexOf方法的元素列表。Element表示要搜索的元素,index表示应从其开始的位置。

示例

让我们考虑一个包含月份名称的数组。我们将使用indexOf方法来查找月份’Mar’的索引。

const months = ['Jan', 'Feb', 'Mar', 'April', 'May']
console.log (months.indexOf('Mar'))

输出

2

它将输出索引为”2″。如果搜索元素不在数组中,则输出为”-1″。

Console.log (months.indexOf('Aug'))

由于元素在数组中不存在,indexOf函数返回“-1”。

JavaScript中的findIndex函数

JavaScript的array.findIndex()函数用于当满足函数中指定的条件时,返回数组中第一个找到的元素的索引。用户在函数调用期间传递元素。如果元素不存在于数组中,则返回-1。

findIndex方法的语法如下:

arr.findIndex (func(element, index, arr), thisArg)

这里,“arr”表示执行findIndex函数的数组。

findIndex方法有以下参数:

  • func - 这是指定条件的回调函数。它有以下参数:
    • element - 它是数组中的当前元素。

    • index - 它是当前元素的索引,且可选。

    • arr - 它也是可选的,表示执行该方法的数组。

  • thisArg - 它是可选的值。

findIndex方法有两种使用方式,即使用“return”关键字和使用“内联”函数。这里,我们将一个函数传递给另一个函数,它们被称为“回调函数”。

使用“return”关键字

假设我们有一个颜色数组,颜色为红色、绿色、蓝色、黄色、橙色。我们想要获取颜色黄色的索引。

示例

const colors = ['red', 'green', 'blue', 'yellow', 'orange']

function is_yellow (element) {
   return element === 'yellow'
}
result = colors.findIndex(is_yellow)
console.log ("The index of 'yellow' is: " + result)

输出结果

将产生以下输出:

The index of 'yellow' is: 3

这里,我们得到的输出是“3”,因为元素“yellow”存在于索引位置“3”。

使用内联函数

上面提到的相同程序也可以写成如下形式:

示例

let colors = ['red', 'green', 'blue', 'yellow', 'orange']

let index = colors.findIndex(color => color === 'blue')
console.log("The index of color 'blue' is: " + index)

输出

将产生以下输出:

The index of color 'blue' is: 2

我们得到输出结果”2″是因为在给定数组中元素’blue’在第2个位置上。

indexOf和findIndex函数之间的区别

indexOf和findIndex方法之间有两个主要的区别:

第一个区别

“indexOf方法以元素作为参数;而findIndex方法以回调函数作为参数。”

示例

以下示例说明了这一点:

const fruits = ['apple', 'banana', 'mango', 'grapes']

console.log("The index of 'banana' is: " + fruits.indexOf('banana'))
console.log ("Index: " + fruits.findIndex(index => index === 'banana'))

输出

它将产生以下输出:

The index of 'banana' is: 1
Index: 1

在这两种情况下,输出都为“1”,因为元素“banana”位于第一个索引处。在indexOf方法中,我们将要搜索的元素作为参数传递,并且该函数将比较数组的每个元素,并返回找到该元素的第一个位置。

在findIndex中,该方法将数组中的每个元素发送给将检查指定元素的函数。如果找到该元素,则返回布尔值“True”,并且findIndex方法返回该特定索引。

在这两种情况下,如果值或元素不在数组中,这两种方法都会返回“-1”作为输出。

第二个区别

indexOf方法适用于获取简单元素的索引。但是,当我们要查找更复杂的东西,比如对象的索引时,此方法无法正常工作。这是由于“引用相等性”所致。

根据引用相等性,在进行比较时,只有当进行比较的两个对象引用的是完全相同的对象时,比较才会返回true。在JavaScript中,除非它们引用相同的对象,否则两个相同的对象是不同的。

示例

让我们通过以下示例来理解:

const obj = {banana:3}
const array = [{mango:7}, obj, {orange:5}]

console.log ("Index: " + array.indexOf({banana:3}))  
console.log ("Index: " + array.findIndex(index => index.banana === 3))
console.log ("Index: " + array.indexOf(obj))

输出结果

它将产生以下输出:

Index: -1
Index: 1
Index: 1

在第一个indexOf函数中,即使对象是相同的,它也无法在给定的数组中找到它,因此它返回”-1″。

在最后使用的indexOf方法中,由于我们传递了实际引用,它返回该对象的索引。findIndex方法检查给定数组中的所有键值对,因此找到并返回该特定对象的正确索引。

结论

indexOf和findIndex方法都返回指定元素的第一个索引。indexOf方法以要返回索引的元素作为参数,而findIndex以函数作为参数。但是,这两个函数都以”-1″作为输出结果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程