含义:
高阶函数全称 (Higher-order function)
1、可以把函数作为参数传递给另一个函数
2、可以把函数作为另一个函数的返回结果
意义:高阶函数是用来抽象通用的问题:抽象可以帮我们屏蔽细节,只需要关注与我们的目标。
常用的高阶函数
1. forEach
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
注意: forEach() 对于空数组是不会执行回调函数的。
2. map
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测。
注意: map() 不会改变原始数组。
function pow(x) {
return x * x;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
// 结果 [1, 4, 9, 16, 25, 36, 49, 64, 81]
var result = arr.map(pow)
3. filter
filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。
4. every
every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
every() 方法使用指定函数检测数组中的所有元素:
- 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
- 如果所有元素都满足条件,则返回 true。
注意: every() 不会对空数组进行检测。
注意: every() 不会改变原始数组。
function checkAdult(age) {
return age >= 18;
}
var ages = [32, 33, 16, 40];
// 结果 false
var result = ages.every(checkAdult);
5. some
some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
some() 方法会依次执行数组的每个元素:
- 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
- 如果没有满足条件的元素,则返回false。
注意: some() 不会对空数组进行检测。
注意: some() 不会改变原始数组。
function checkAdult(age) {
return age >= 18;
}
var ages = [3, 10, 18, 20];
// 结果 true
var result = ages.some(checkAdult);
6. find/findIndex
find:遍历数组中元素,找到第一个满足条件得元素。
findindex:同find,返回第几个元素。
7. reduce
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
return x + y;
}); // 25
8. sort
sort() 方法用于对数组的元素进行排序:默认把所有元素先转换为String再排序。注意是转换为ASCI码后再作比较
排序顺序可以是字母或数字,并按升序或降序。
默认排序顺序为按字母升序。
注意:当数字是按字母顺序排列时"40"将排在"5"前面。
使用数字排序,你必须通过一个函数作为参数来调用。
函数指定数字是按照升序还是降序排列。
这些说起来可能很难理解,你可以通过本页底部实例进一步了解它。
注意: 这种方法会改变原始数组!。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
// fruits 输出结果:Apple,Banana,Mango,Orange