2011-08-23 7 views
18

をソートするには、私は次の形式のオブジェクトの配列を持っています。今度はarr(これは'item1'でソートされています)をもう一度並べ替えますが、今度は'item2'で、今度は'item1'と同じです。最後の配列は次のようになります。Javascriptのソートカスタムコンパレータ機能ソートされた配列

arr = [ 
    { 'item1' : 1234, 'item2' : 'apple' }, 
    { 'item1' : 1234, 'item2' : 'banana' }, 
    { 'item1' : 1234, 'item2' : 'custard' }, 
    { 'item1' : 2156, 'item2' : 'melon' }, 
    { 'item1' : 4345, 'item2' : 'asparagus' } 
]; 

私はそうのような第二の場合のソート関数を記述しようとした:

arr.sort(function(a,b){ 
    if(a.item1 === b.item1){ 
    return a.item2 > b.item2 ? 1 : a.item2 < b.item2 : -1 : 0; 
    } 
}); 

私は、最終的なソートされた配列を取得するために、1つの関数に2種類を組み合わせることができしかし、ちょうど'item1'またはちょうど'item2'で並べ替える必要がある場合があります。

+0

あなたはITEM1、ITEM2でソートするために管理している場合、それらの両方が、その後、あなたは正確に何を求めていますか? –

+0

そのように、私は "new sortByItem2(new sortByItem1(arr))"と言うデコレータパターンを書いています。 sortByItem1(arr)やsortByItem2(arr)や "new sortByItem1(new sortByItem2(arr))"のように使うこともできます。 – fenderplayer

答えて

26

比較機能には、item1、item2、item1、item2、item2、item1の順に並べ替えることができます。

例えば:

arr.sort(function(a,b){ 
    if(a.item1 == b.item1){ 
    return a.item2 > b.item2 ? 1 : a.item2 < b.item2 ? -1 : 0; 
    } 

    return a.item1 > b.item1 ? 1 : -1; 
}); 
+0

javascriptのソート関数でどのように単純にコンパイラを使うことができますか? – cyan

関連する問題