高階函數(shù)將其他函數(shù)作為參數(shù)或?qū)⒎祷睾瘮?shù)作為結(jié)果。它們提供了JavaScript中清晰易懂的語法。這將幫助你以更少的代碼來實現(xiàn)更多目標(biāo)。
-
forEach()
接受另一個函數(shù)作為參數(shù)。它用于以一種簡單的方式循環(huán)遍歷數(shù)組項。它可以接受三個類型的參數(shù)(元素,值和索引)。
var arr = [1, 2, 3, 4, 5];
// Using ES5.
arr.forEach(function(item){
if(item > 3){
console.log(item); // Returns 4 and 5.
}
});
// Using ES6.
arr.forEach(item =>{
if(item > 3){
console.log(item); // Returns 4 and 5.
}
});
-
map()
返回一個數(shù)組,該數(shù)組的長度與調(diào)用該數(shù)組的長度相同。只要它的回調(diào)函數(shù)沒有改變,它也不會改變原始數(shù)組。它也可以采用三個類型參數(shù)(元素,值和索引)。
const users = [
{ name: 'John', age: 34 },
{ name: 'Amy', age: 20 },
{ name: 'camperCat', age: 10 }
];
const names = users.map(user => user.name);
console.log(names); //Returns: [ 'John', 'Amy', 'camperCat' ]
const new_ages = users.map(user => {
if (user.age < 20){
return user.age * 2;
}
return user.age;
})
console.log(new_ages); //Returns: [34, 20, 20]
-
filter()
在數(shù)組的每個元素上調(diào)用一個函數(shù),并返回一個僅包含該函數(shù)返回的元素的新數(shù)組true。換句話說,它根據(jù)傳遞給它的函數(shù)過濾數(shù)組。就像map方法一樣,但是它不需要修改原始數(shù)組就可以完成工作。
可以接受三個參數(shù):
第一個參數(shù):當(dāng)前正在處理的元素;
第二個參數(shù):該元素的索引;
第三個參數(shù):在其上filter調(diào)用該方法的數(shù)組;
filter中的回調(diào)函數(shù)必須返回一個布爾值:
true:函數(shù)內(nèi)部會自動將這次回調(diào)的item加入到新的數(shù)組中
false:函數(shù)內(nèi)部會過濾掉這次的item
const arr = [1, 2, 3, 4, 5];
// Using ES5 syntax.
var filtered = arr.filter(function(item){
return item < 3;
});
console.log(filtered); // Returns: [1, 2]
// Using ES6 syntax.
const filtered = arr.filter(item => item < 3);
console.log(filtered); // Returns: [1, 2]
-
reduce()
允許使用更通用的數(shù)組處理形式,并且filter與map可以作為特殊應(yīng)用派生出reduce。
它遍歷數(shù)組中的每個項目并返回一個值。這是通過將其作為參數(shù)回調(diào)來實現(xiàn)的。
該函數(shù)reduce有兩個位置參數(shù),第一個是累加器,另一個是迭代值,它返回累加值。
const users = [
{ name: 'John', age: 34 },
{ name: 'Amy', age: 20 },
{ name: 'camperCat', age: 10 }
];
const sumOfAges = users.reduce((sum, user) => sum + user.age, 0);
console.log(sumOfAges); //Returns: 64.
const sumAges = users.reduce((sum, user) => {
return sum + user.age;
}, 0);
console.log(sumAges); //Returns: 64.
-
sort()
對數(shù)組的項目進(jìn)行排序。排序順序可以是字母或數(shù)字,也可以是升序或降序。
// 以升序?qū)?shù)組中的數(shù)字進(jìn)行排序:
// Using ES5
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){
return a-b;
}) // [1,5,10,25,40,100].
// 以降序?qū)?shù)組中的數(shù)字進(jìn)行排序:
// Using ES6
const points = [40, 100, 1, 5, 25, 10];
points.sort((a,b)=> b - a); // [100,40,25,10,5,1].
-
every()
檢查數(shù)組中的每個元素是否通過特定測試。它返回一個布爾值(true / false)。
//檢查數(shù)組中的每個元素numbers是否小于10。
let numbers = [1, 5, 8, 0, 10, 11];
numbers.every(function(currentValue) {
return currentValue < 10;
});
console.log(res);
// Returns false
-
some()
有點類似于該方法every(),它檢查數(shù)組中的任何元素是否通過特定測試。它還返回一個布爾值(true / false)。
//檢查數(shù)組中的任何元素numbers是否小于10。
var numbers = [10, 50, 8, 220, 110, 11];
numbers.some(function(currentValue) {
return currentValue < 10;
});
// Returns true