2012-05-01 9 views
5

は、私はこのように見えるオブジェクトとItemオブジェクトの配列MyArrayOfItemsを持っています。JavaScriptのソート配列の二重ソート

私はこれまでのところ、このようになりますカスタムソート機能があります:ContainerIDので

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 '> 'とスティングを比較することができます。私は、全体的な質問が2つのプロパティでどのようにソートするかについての問題であると考えました。その場合、明らかに重複しています。 –

答えて

6

String.localeCompare機能を使用してください。 ContainerIDa,bの場合に使用してください。

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は良い選択ですが、クロムには問題がありました.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。私はlocaleを好む。 – frenchie