前言
关于这三个高阶函数的使用技巧可以前往廖雪峰老师的教程网站查看,写的很好
廖雪峰-javascript教程-高阶函数
map函数的实现
直接上代码
//map接收一个数组arr和一个函数fn
function map(arr, fn) {
let idx = -1, //表示每次循环的数组下标
len = arr.length,
result = new Array(len);
//这是我们要返回的新的数组,它的长度和arr一样
while (++idx < len) {
result[index] = fn(arr[idx], idx, arr);
//应用函数fn到数组中的每一个元素,再把结果放入数组中
//后面的idx, arr也放进arguments中
}
return result;
}
reduce函数的实现
注意reduce函数需要接受以下参数:
- fn —— 迭代函数会应用于数组的每个元素,其参数包括累计值,当前值,当前索引以及数组本身。
- 累加器(accumulator)—— 累积初始值,之后会存储每次迭代函数的计算结果,并不断被传入子函数。
function reduce(arr, fn, [accumulator]){
let idx = -1,
len = arr.length;
if (!accumulator && len > 0) {
accumulator = arr[++idx];
}
while (++idx < len) {
accumulator = fn(accumulator,
arr[idx], idx, arr];
}
return accumulator;
}
filter函数的实现
filter(也称为select)是一个能够遍历数组中的元素并返回一个新子集数组的高阶函数,其中的元素由谓词P,即下文的predicate计算得出的true值结果来确定。
function filter(arr, predicate) {
let idx = -1,
len = arr.length,
result = [];
while (++idx < len) {
let value = arr[idx];
if (predicate(value, idx, this)) {
result.push(value);
}
}
return result;
}
参考资料:Luis Atencio 《JavaScript函数式编程指南》
如果有帮助谢谢你点赞收藏加关注哟