2015-12-05 26 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