2014-05-14 81 views
1

我試圖使用下劃線_.groupBy()_.sortBy成對,並且問題在於最後一個將對象從groupBy返回的鍵改爲具有索引的數組。是否有可能保留來自對象的原始索引(鍵)?UnderscoreJs:_.groupBy和_.sortBy

這裏是例如:

我的代碼:

var sorted = _.chain(cars).groupBy('Make').sortBy(function(car) { 
    return car.length * -1; 
}); 

結果從groupBy

{ 
    "Volvo" : [ "S60", "V40" ], 
    "Volkswagen" : [ "Polo", "Golf", "Passat" ] 
} 

結果從sortBy

[ 
    0 : [ "Polo", "Golf", "Passat" ], 
    1 : [ "S60", "V40" ] 
] 

預期結果:

[ 
    "Volkswagen" : [ "Polo", "Golf", "Passat" ], 
    "Volvo" : [ "S60", "V40" ] 
] 
+0

是否計劃將顯示你的'cars'變量? – thefourtheye

+2

你不能排序對象(鍵沒有順序),你只能對數組排序!您的「預期結果」是一個語法錯誤。 – Bergi

+0

@Bergi是的我知道這是不可能的,但你仍然可以有這樣一個數組:'var arr = []; arr [「沃爾沃」] = [「S60」,「V40」]'。那是我所指的那個。 –

回答

4

對象在JavaScript中是無序的。如果您需要類似對象的東西但訂購了,則可以使用_.pairs進行轉換,然後對對列表進行排序。

_.pairs({ 
    "Volvo" : [ "S60", "V40" ], 
    "Volkswagen" : [ "Polo", "Golf", "Passat" ] 
}) 

給出:

[ 
    ["Volvo", [ "S60", "V40" ]], 
    ["Volkswagen", [ "Polo", "Golf", "Passat" ]] 
] 

...然後你就可以使用排序_.sortBy。如果您分配了以上cars,則:

_.sortBy(cars, function(x) { return -x[0].length; }); 

給出:

[ 
    [ 'Volkswagen', ['Polo', 'Golf', 'Passat' ]], 
    [ 'Volvo', ['S60', 'V40']] 
]