你可以在完成之前使用下划线链的修改值吗?

时间:2013-08-26 16:52:25

标签: underscore.js

我正在尝试创建一个对玩家列表进行排序并按分数识别前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;
    }; 

这可能吗?以某种方式在每个过滤步骤之后使用数组的状态?

1 个答案:

答案 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();            
}