2015-12-05 24 views
0

我對與_.sortBy(underscore.js)排序值。而 一些問題,我有一些像這樣的文本值混合數字:如何排序與underscore.js

[ 
    { 
    first: A, 
    second: 10, 
    third: D3 
    } 
    { 
    first: B, 
    second: 2, 
    third: F3 
    } 
    { 
    first: C, 
    second: 3, 
    third: G4 
    } 
    { 
    first: A, 
    second: 9, 
    third: G5 
    } 
] 

我嘗試用它進行排序:

var sortedArray = _.sortBy(list_data, function(data) { 
    return [data[0].first, data[0].second.join("_"); 
}); 

它總是返回[{first:A,second:10,third:D3}, {first:A,second:9,third:G6}, {first:B,second:2,third:F3}, {first:C,second:3,third:G4}]

,但我想它返回這樣[{first:A,second:9,third:G6}, {first:A,second:10,third:D3}, {first:B,second:2,third:F3}, {first:C,second:3,third:G4}]

我該怎麼辦? pleace的幫助,我是這個新手。非常感謝你。

回答

0
var sortedArray = _(list_data) 
        .chain() 
        .sortBy(function(data){ 
        return data.second; 
        }) 
        .sortBy(function(data){ 
        return data.first; 
        }) 
        .value(); 
+0

我已經在JS Bin中嘗試了你的代碼,它完美的工作,但不知道我的數組中的每個對象。我會回去檢查,如果它的工作,我會接受你的答案。非常感謝。 –

1

你可以使用Array.prototype.sort https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

var array = [ 
    { 
    first: 'C', 
    second: 3, 
    third: 'D3' 
    }, 
    { 
    first: 'A', 
    second: 9, 
    third: 'G5' 
    } 
]; 

var sorted = array.sort(function(a, b) { 
    var first = a.first + a.second + a.third; 
    var second = b.first + b.second + b.third; 
    return first.localeCompare(second); 
}); 
+0

您的解決方案,它將只檢查第二個鍵。例如:如果我有{first:C,second:3,third:A1}。結果將返回{first:C,second:3,third:A1} ,, {first:'A',second:9,third:'G5'},{first:'A',second:10,third: 'D3'},所以我不想那樣。我想檢查關鍵[「第一」],然後檢查關鍵[「第二」],然後檢查關鍵[「第三」] –

+0

我添加更多的對象數組請再次檢查我的編輯問題。 @ user874774 –

+0

@thanapatsaeliu你只需調整你的比較函數。請參閱編輯。 – pethel