繼續數組方法,今天應該到filter了。
filter:filter()
方法創建一個新數組, 其包含通過所提供函數實現的測試的所有元素。
使用:
var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']; const result = words.filter(word => word.length > 6); console.log(result);
從示例中看,也就是說,需要過濾出來元素的單詞長度大於6的所有元素。
查看一下結果呢!
語法:
var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
filter有兩個參數,第一個就是回調函數,第二個參數與之前我們說到的some、every啊類似,基本上就就是數組函數只要提供了回調函數,都會有這么一個用於執行callback回調的this值。
回調函數也是三個參數,就沒什么可說的了,數組函數的所有回調函數都是這三個參數:元素element、索引index、數組本身array。
來吧,開始重構:function filter(arr, fn, thisArg) { if (!(arr instanceof Array)) throw new Error("請確保第一個參數類型為數組") var results = [] for (var i = 0; i < arr.length; i++) { if (fn.call(thisArg, arr[i], i, arr)) results[results.length] = arr[i] } return results }
是不是也真的沒什么好神奇的?
find:find()
方法返回數組中滿足提供的測試函數的第一個元素的值。否則返回undefined
。
使用:
var array1 = [5, 12, 8, 130, 44]; var found = array1.find(function(element) { return element > 10; }); console.log(found);
其實依據我們之前介紹其他的數組方法所說的,很容易理解到,find方法也是提供一個回調函數,那么必然也有一個可選的用於回調函數的this值,他查找並返回的是第一個符合回調函數測試結果的元素。其他的並沒有什么特殊之處。
function find(arr, fn, thisArg) { if (!(arr instanceof Array)) throw new Error("請確保第一個參數類型為數組") for (var i = 0; i < arr.length; i++) { if (fn.call(thisArg, arr[i], i, arr)) { return arr[i] } } return undefined }
說到這里,自然而然的可以預料到,下一個函數必然是findIndex了,從字面上就可以理解到findIndex是干什么的了!而且有find在前,findIndex也真的沒什么好說的了。
findIndex:findIndex()
方法返回數組中滿足提供的測試函數的第一個元素的索引。否則返回-1。
簡單說一下,find返回的是數組符合回調測試條件的第一個元素,findIndex返回的是符合回調測試條件的第一個元素的索引。
function findIndex(arr, fn, thisArg) { if (!(arr instanceof Array)) throw new Error("請確保第一個參數類型為數組") for (var i = 0; i < arr.length; i++) { if (fn(thisArg, arr[i], i, arr)) { return i } } return -1 }
看這兩個重構的函數都沒有他打區別,也就是一個元素,一個索引值而已。