필자는 배열 'reduce()
에 전달 된 함수를 추상화하여 함수를 일반적인'Array reducer 중 가장 큰 것 '으로 만들기 위해 함수를 추상화하려고합니다. 이를 달성하기 위해, 나는 비교 기준을 지정할 수 있도록 reduce()
매개 변수의 다른 특정 기능을 전달하려고합니다. 내 예에서, 이러한 라인Higher-order reduce() function
return players.reduce(topPlayerReducer, players[0], getThreePointerPercentage);
및 topPlayerReducer
몇 가지 기준에 따라 배열에서 가장 큰 항목을 발견 reduce()
에 전달하는 일반 기능입니다
return players.reduce(topPlayerReducer, players[0], getReboundNumber);
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);
}
이렇게했습니다. 그것이 작동하는 방법을 믿는 것은 조금 어렵지만 나는 그것을 얻었다고 생각합니다. – db2791
차가움. 기본적으로 새 구현에서는'topPlayerReducer'를 호출 할 때마다 두 명의 플레이어를 필요로하고 조건을 만족하는 새로운 함수를 반환합니다. 이 방법으로 작성한 함수는 직접 정의한 함수와 동일하므로'reduce'와 모든 좋은 것을 전달할 수 있습니다. 좀 더 주위를 돌아보고 싶다면,'topPlayerReducer'를 조금만 노려보십시오 : 커맨드 라인/console에서'var foo = topPlayerReducer (someFunc)'를 호출하십시오. 그러면'foo '가 무엇인지 알 수 있고, 몇 가지 인자로 호출 할 수 있습니다. – Peter