【发布时间】:2014-03-21 00:05:57
【问题描述】:
我正在阅读 Michael Fogus 的《Functional Javascript》一书。在第 4 章中,他创建了一个名为 finder 的函数,它利用了 reduce。我很难掌握这个功能的实现...
function finder(valueFun, bestFun, coll){
return _.reduce(coll, function(best, current){
var bestValue = valueFun(best);
var currentValue = valueFun(current);
return (bestValue === bestFun(bestValue, currentValue)) ? best : current;
});
}
(注意他在书中使用了 Underscore.js 库)
不管怎样,他在下面的例子中使用了finder-function:
var people = [{name: "Fred", age: 65}, {name: "Lucy", age: 36}];
**finder(plucker('age'), Math.max, people);**
其中plucker函数定义为:
function plucker(field){
return function(obj){
return (obj && obj[field]);
}
}
(plucker 应该返回一个键的值)
我正在逐行浏览代码,但是当我遇到 finder-function 定义中的 reduce-function 时,我很吃力。我不明白的是
valueFun(best)
和 valueFun(当前)
通过 reduce 函数的每次迭代,best 和 current 的值分别是多少?我的理解是 valueFun 是 plucker 函数。但是他已经给 plucker 提供了“年龄”这个参数,那么最好和当前代表什么?
如果您要回答这个问题,如果您概述了如何得出您的答案,我将非常感激,以便我看到逐步通过 finder 函数的值。谢谢!
【问题讨论】:
标签: javascript functional-programming underscore.js reduce higher-order-functions