【发布时间】:2016-09-19 01:55:44
【问题描述】:
我想抽象传递给我的数组的reduce() 函数的函数,以使该函数成为一个通用的“最伟大的 Array reducer”。为此,我想在reduce() 参数中传入不同的特定函数,以便能够指定比较标准。在我的示例中,这些是行
return players.reduce(topPlayerReducer, players[0], getThreePointerPercentage);
和
return players.reduce(topPlayerReducer, players[0], getReboundNumber);
其中topPlayerReducer 是传递给reduce() 的通用函数,它根据某些标准查找数组中的最大项。我的标准是第三个论点。如何合并我的特定比较函数(getThreePointerPercentage 和 getReboundNumber)以便保持这种抽象级别?现在,我收到fn 不是topPlayerReducer 中的函数的错误。我对此并不感到惊讶,因为我的其他功能不在范围内。我也试过做
var reboundReducer = topPlayerReducer.bind(getReboundNumber);
return gameInfo.players.reduce(reboundReducer, players[0]);}
但我遇到了同样的错误。
我意识到我可以通过为reduce() 制作两个不同的函数来获得一个结果,但这并不能让我满意。我想知道是否有不同的方法。
function getGuardWithMostThreePointers(gameInfo){
return players.reduce(topPlayerReducer, players[0], getThreePointerPercentage);
}
function getPlayerWithMostRebounds(gameInfo){
return players.reduce(topPlayerReducer, players[0], getReboundNumber);
}
function topPlayerReducer(topPlayer, currentPlayer, fn){
if (fn(currentPlayer) > fn(topPlayer)){
return currentPlayer;
} else {
return topRebounder;
}
}
function getReboundNumber(player){
return parseInt(player.rebounds_offensive) + parseInt(player.rebounds_defensive);
}
function getThreePointerPercentage(player){
return parseInt(player.three_pointers_made) / parseInt(player.three_pointers_attempted);
}
【问题讨论】:
标签: javascript reduce higher-order-functions