2012-05-01 110 views
5

我有一个数组ItemMyArrayOfItems对象有看起来像这样的对象:JavaScript的排序数组双排序

Item 
{ 
    ContainerID: i, // int 
    ContainerName: 'SomeName', // string 
    ItemID: j, // int 
    ItemName: 'SomeOtherName' // string 
} 

我想,这样它是由ContainerID按字母顺序排序,然后通过ItemName这个数组排序。

我有一个自定义排序功能,到目前为止是这样的:

function CustomSort(a, b) { 

    Item1 = a['ContainerID']; 
    Item2 = b['ContainerID']; 

    return Item1 - Item2; 
} 

MyArrayOfItems.sort(CustomSort); 

这种种的数据筒,但我怎么然后排序ITEMNAME?

谢谢。

+0

[由两个场的Javascript排序阵列]的可能重复(http://stackoverflow.com/questions/6129952/javascript-sort-array-by-two-fields) –

+0

@FelixKling:不是真的;我需要它按字母顺序排序。 – frenchie

+0

那么?尽管我同意'localCompare'是一种更好的方法,你可以很容易地将蜇伤与'<' and '>'进行比较。我认为整体问题是关于如何按两种属性排序,在这种情况下,它显然是重复的。 –

回答

6

使用String.localeCompare函数。并在abContainerID相等时使用它。

function CustomSort(a, b) { 
    var Item1 = a['ContainerID']; 
    var Item2 = b['ContainerID']; 
    if(Item1 != Item2){ 
     return (Item1 - Item2); 
    } 
    else{ 
     return (a.ItemName.localeCompare(b.ItemName)); 
    } 
} 

要调整排序顺序,你可以随时把-任何return表达的前面。

+0

LocalCompare是否在IE8中工作? – frenchie

+0

它应该。就像它在JavaScript 1.2中很老。 –

+0

localcompare是一个不错的选择,但正如我记得chrome有问题.http://code.google.com/p/v8/issues/detail?id = 459 –

4
function CustomSort(a, b) { 

    Item1 = a['ContainerID']; 
    Item2 = b['ContainerID']; 
    if(Item1 - Item2 !=0){ 
     return Item1 - Item2; 
    } 
    else{ 
     if (a.ItemName < b.ItemName) 
     return -1; 
     if (a.ItemName > b.ItemName) 
     return 1; 
     return 0; 
    } 
} 
+0

好的,谢谢。 upvoted因为它也有效。尽管我更喜欢localeCompare。 – frenchie