ES6+ find () 和 findIndex ()
1. 前言
上一節 我們學習了 includes()
方法用于查找數組,但在數組中我們希望查找一個符合某個條件的元素,在 ES5 中有 filter
方法可以用于過濾符合條件的元素,但是 filter
返回的是一個數組,其實我們只想得到符合條件的值或者索引。本節將學習 ES6 的 find
和 findIndex
方法,豐富了數組查詢的方法。
2. 語法詳解
2.1 基本語法
這兩個方法的使用基本相同,只是它們的返回結果不同。find
方法返回的是數組中符合條件的第一個值,findIndex
方法則返回符合條件的第一個索引的位置。它們都只是關注第一個查找到的結果,在查找到結果以后就不會繼續查找了。
使用語法:
arr.find(callback[, thisArg])
arr.findIndex(callback[, thisArg])
參數解釋:
參數 | 描述 |
---|---|
callback | 一個回調函數,接受數組的每一項并執行該函數,當主動返回 true 時,則終止調用 |
thisArg | (可選)執行 callback 時作為 this 對象的值 |
callback
函數有三個參數:當前元素的值、當前元素的索引,以及數組本身。數組中的每一項元素都會執行一次 callback
函數,直到 callback
返回 true
時,則終止調用,并且把查找的結果返回。否則返回 undefined
。
如果提供了 thisArg
參數,那么它將作為每次 callback
函數執行時的 this
,如果未提供,則使用 undefined
。
2.2 方法示例
以下是 find
和 findIndex
的使用示例,以便更好地理解這兩個方法。
var arr = [1, 6, 3, 4, 5]
var target = arr.find(function(item) {
return item % 2 === 0
})
console.log(target) // 6
var target = arr.findIndex(function(item) {
return item % 2 === 0
})
console.log(target) // 1
上面的代碼找出數組中是 2 的倍數的項,find
方法返回的是數組中符合條件的第一個值 6;findIndex
方法返回的是數組中符合條件的第一個索引的位置 1。
3. 語法對比
在 ES5 中有 filter
方法可以用于查找符合條件的元素,filter
會遍歷整個數組把符合條件的數組都返回出來,與 find
不同的是,它的返回結果是一個符合查詢條件的數組。find
和 findIndex
則只關注數組中有沒有符合查詢條件的元素,而且只關注查詢到的第一個元素。
let arr = [1,2,3,4,5]
let find = arr.filter(function(item) {
return item % 2 === 0
})
console.log(find) // [2, 4]
上面的代碼是找到所有滿足 2 的倍數的數組,返回的結果同樣是一個數組。
4. 小結
本節講解了數組的 find
和 findIndex
方法的使用,主要注意的是它們的返回的結果不同,find
方法返回的是數組中符合條件的第一個值,findIndex
方法則返回符合條件的值的第一個索引。ES5 中的 filter
方法也可以查詢,它返回的是滿足條件的整個數組,但這兩個方法都只關注查找的值是否存在。在只關注是否存在的情況下,這兩個方法的效率要高,豐富了對數組的查找場景。