JavaScript中的filter方法是一個(gè)高階函數(shù),它接收一個(gè)函數(shù)作為參數(shù)并返回一個(gè)新數(shù)組,這個(gè)新數(shù)組由原始數(shù)組中滿足篩選條件的元素組成。
例如,我們有一個(gè)包含多個(gè)數(shù)字的數(shù)組:
const numbers = [1, 2, 3, 4, 5];
現(xiàn)在我們想要篩選出這個(gè)數(shù)組中的所有偶數(shù),我們可以寫一個(gè)函數(shù)來(lái)實(shí)現(xiàn)篩選條件:
function isEven(num) {
return num % 2 === 0;
}
然后使用filter方法進(jìn)行篩選:
const evenNumbers = numbers.filter(isEven);
console.log(evenNumbers); // [2, 4]
上面的代碼中,isEven函數(shù)用于確定篩選條件,返回true表示當(dāng)前元素符合條件,false則被排除。
我們也可以使用匿名函數(shù)實(shí)現(xiàn)篩選:
const evenNumbers = numbers.filter(function(num) {
return num % 2 === 0;
});
console.log(evenNumbers); // [2, 4]
除了篩選出符合條件的元素,filter方法也會(huì)跳過(guò)原數(shù)組中那些值為undefined或null的元素,這樣就可以避免在操作時(shí)產(chǎn)生意外異常了。
當(dāng)然,我們也可以使用箭頭函數(shù)來(lái)實(shí)現(xiàn)篩選:
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]
filter方法還支持第二個(gè)參數(shù),用于指定回調(diào)函數(shù)(即篩選條件函數(shù))內(nèi)部的this對(duì)象。例如:
const person = {
name: 'Tom',
age: 18,
friends: ['Jerry', 'Spike', 'Tyke']
};
function hasFriend(friend) {
return this.friends.includes(friend);
}
const hasSpike = person.friends.filter(hasFriend, person);
console.log(hasSpike); // ['Spike', 'Tyke']
上面的代碼中,我們選擇使用了第二個(gè)參數(shù)來(lái)指定回調(diào)函數(shù)中的this對(duì)象,使得回調(diào)函數(shù)中的this.friends等價(jià)于person.friends。
總之,JavaScript中的filter方法是一個(gè)非常好用的函數(shù),它可以輕松地對(duì)原數(shù)組中的元素進(jìn)行篩選,實(shí)現(xiàn)自定義的查詢需求。