高阶函数
满足下列条件之一的函数:
函数作为参会素被传递(如回调函数);
函数可以作为返回值输出;
一些内置高阶函数的例子:
Array.prototype.map
map()方法通过调用对输入数组中的每个元素调用回调函数来创建一个新数组。
map()方法将获取回调函数的每个返回值,并使用这些值创建一个新数组。
map()方法的回调函数总共接收3个参数:element,index和array。
例子:
假设我们有一个数字数组,我们想创建一个新数组,新数组的每个值是原数组对应值的两倍。
不使用高阶函数:
const arr1 = [1, 2, 3]; const arr2 = []; for(let i = 0; i < arr1.length; i ++) { arr2.push(arr[i] * 2); } console.log(arr2); //[2, 4, 6]
使用高阶函数:
const arr1 = [1, 2, 3]; const arr2 = arr1.map(item=> item * 2); console.log(arr2);
Array.prototype.filter
filter()方法会创建一个新数组,其中包含所有通过回调函数测试的元素。传递给filter()方法的回调函数接受3个参数:element,index和array
例子:
假设我们有一个包含数字值的数组,选择其中的数值创建一个数值大于18的数组
不使用高阶函数:
const arr1 = [1, 2, 19, 20]; const arr2 = []; for(let i = 0; i < arr1.length; i ++) { if(arr1[i] > 18) { arr2.push(arr1[1]) } } console.log(arr2)
使用高阶函数:
const arr1 = [1, 2, 19, 20]; const arr2 = arr1.filter(item=> item > 18); console.log(arr2)
Array.prototype.reduce
reduce()方法对调用数组的每个元素执行回调函数,最后生成一个单一的值并返回。
reduce()方法接受两个参数:redecer函数(回调),一个可选的initialValue
reducer函数(回调)接受4个参数:accumulater, currentValue, currentIndex, sourceArray
如果提供了 initialValue,则累加器将等于 initialValue,currentValue 将等于数组中的第一个元素。
如果没有提供 initialValue,则累加器将等于数组中的第一个元素,currentValue 将等于数组中的第二个元素。
例子:
对一个数字数组的求和:
不使用高阶函数:
const arr = [1, 2, 7]; let sum = 0; for(let i = 0; i< arr.length; i++) { sum = sum + arr[i] }
// 10
使用高阶函数:
const arr = [1, 2, 7]; const sum = arr.reduce((accumulator,currentValue)=> return accumulator + currentValue ) // 10
还可以为它提供初始值:
const arr = [1, 2, 7]; const sum = arr.reduce((accumulator,currentValue)=> return accumulator + currentValue,10 ) // 20