2013-08-26 40 views
0

我試圖創建一個函數,對玩家列表進行排序,並通過分數確定前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

好了,你試過嗎?你有錯誤嗎? – nrabinowitz

+3

你能提供一些你正在使用的格式的樣本數據以及你希望得到的結構嗎?可以讓它在jsbin.com中更容易理解/測試。也給地圖的第三個參數應該是該數組的當前狀態(函數(播放器,索引,集合) – ne8il

+0

抱歉,我實際上沒有收到任何電子郵件警報這些評論 - 奇怪 - 我只是得到一個警報回答下面,所以我會在測試數據jsfiddle中測試並回復給你 - 已經有一段時間了,但我仍然想知道; -D – headwinds

回答

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();    
} 
+1

這是非常強大的 - 很好的工作!我已經在這個jsfiddle中測試過它:http://jsfiddle.net/headwinds/qc2sf/ – headwinds

相關問題