我正在尝试创建一个对玩家列表进行排序并按分数识别前5名的功能。
我在一个数组上运行了几个链接过滤器,我希望能够在每一步之后使用修改过的数组的当前状态。
我目前正在通过两个连锁步骤实现这一目标,但如果可能的话,我希望能在一个步骤中实现这一目标:
var hilightTop5 = function( propName, aPlayers ) {
var aSortedReversed = _.chain(aPlayers)
.sortBy( function(player){ return player[propName] })
.reverse()
.value();
var aTop5Map = _.chain(aSortedReversed)
.map( function(player) {
player.top5 = ( player[propName] >= aSortedReversed[4][propName] ) ? 0 : 1;
return player; })
.value();
return aTop5Map;
};
我想做这样的事情,只使用一个链:
var hilightTop5 = function( propName, aPlayers ) {
var aTop5Map = _.chain(aPlayers)
.sortBy( function(player){ return player[propName] })
.reverse()
.map( function(player) {
var aCurrentStateTop5Map = aTop5Map.value(); // this.aTop5Map.value() ?!
player.top5 = ( player[propName] >= aCurrentStateTop5Map[4][propName] ) ? 0 : 1;
return player; })
.value();
return aTop5Map;
};
这可能吗?以某种方式在每个过滤步骤之后使用数组的状态?
答案 0 :(得分:1)
您可以使用下划线传递给地图迭代器的列表值:
var hilightTop5 = function(sortProperty, players) {
return _.chain(players)
.sortBy(sortProperty)
.reverse()
.map(function(player, key, list) {
player.top5 = (player[sortProperty] >= list[4][sortProperty]) ? 1 : 0;
// Another possibility:
// player.top5 = (key < 5) ? 1 : 0;
return player;
})
.value();
}