Javascript中的filter函數(shù)是一種非常常用的數(shù)組方法,它可以基于指定的條件對數(shù)組中的元素進行篩選,并返回一個新的數(shù)組,不會對原數(shù)組做任何修改。
使用filter方法需要傳入一個回調函數(shù)作為參數(shù),該回調函數(shù)會對數(shù)組中的每個元素都進行一次評估,并根據(jù)評估結果確定是否保留該元素。回調函數(shù)接收三個參數(shù),分別是當前遍歷到的元素、該元素在數(shù)組中的索引和數(shù)組本身。
let arr = [1, 2, 3, 4];
let oddArr = arr.filter(function(ele) {
return ele % 2 !== 0;
});
console.log(oddArr); // [1, 3]
上面的例子中,我們遍歷了一個包含1到4的數(shù)組,使用filter方法返回了一個只包含奇數(shù)的新數(shù)組。
在回調函數(shù)中,我們進行了對元素的奇偶性判斷,判斷為奇數(shù)則保留,否則舍棄。通過這樣的篩選方法,我們可以得到符合自己需求的數(shù)據(jù),而不用去手動剔除不符合條件的元素。
除了奇偶性判斷外,我們可以對元素做更多復雜的篩選,比如在一個對象數(shù)組中查找年齡大于18歲的對象:
let persons = [
{ name: 'john', age: 18 },
{ name: 'jane', age: 26 },
{ name: 'jim', age: 16 },
{ name: 'jack', age: 30 }
];
let adultArr = persons.filter(function(person) {
return person.age >= 18;
});
console.log(adultArr); // [{ name: 'john', age: 18 }, { name: 'jane', age: 26 }, { name: 'jack', age: 30 }]
在回調函數(shù)中,我們訪問了對象的age屬性,判斷是否大于18歲,符合條件則保留該對象。
需要注意的是,filter方法返回的是一個新的數(shù)組,并不會修改原數(shù)組。如果我們需要在原數(shù)組上做修改,則需要使用類似于map方法的技巧,將callback函數(shù)中對元素的操作轉化成return一個新的元素:
var arr = [1, 2, 3, 4];
arr = arr.filter(function(ele) {
return ele % 2 !== 0;
}).map(function(ele) {
return ele * 2;
});
console.log(arr); // [2, 6]
在這個例子中,我們篩選出數(shù)組中的奇數(shù)元素,并且將其乘以2,得到一個新的數(shù)組。
總之,filter是一個基礎且強大的數(shù)組方法,在各種場景下均能發(fā)揮重要作用,掌握好它的使用,可以讓我們的代碼更加簡單高效。