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'))
由於該元素不存在於 months 陣列中,因此 indexOf 函式返回“-1”。
JavaScript 的 findIndex 函式
JavaScript 的 array.findIndex() 函式用於返回陣列中存在的元素的第一個找到的索引,當它滿足函式中指定的條件時。元素由使用者在函式呼叫期間傳遞。如果元素不存在於陣列中,則返回 -1。
findIndex 方法的語法如下所示
arr.findIndex (func(element, index, arr), thisArg)
這裡,“arr”表示正在執行 findIndex 函式的陣列。
findIndex 方法具有以下引數
func − 這是指定條件的回撥函式。它採用以下引數
o element − 它是在陣列中的當前元素
o index − 它是當前元素的索引,並且是可選的
o 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”,因為元素“黃色”存在於索引位置“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”,因為元素“藍色”在給定陣列的第 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”作為輸出。