2016-04-18 1 views
1

誰かがArray.sort()を手伝ってくれますか? 1つの値(たとえばreturn a < b)でソートできますが、それ以上の値ではソートできません。 いくつかのプライマリ値が同じ場合、このケースが必要です。JavaScriptのArray.sort()とマルチキー

など。配列:

var data = [ 
     { 
      "name": "Paolos Pizza", 
      "rating_count": 20, 
      "rating_value": 5, 
      "price": 7 
     }, 

     { 
      "name": "Bella Italia", 
      "rating_count": 55, 
      "rating_value": 3, 
      "price": 7 
     }, 

     { 
      "name": "Mama Mia", 
      "rating_count": 2, 
      "rating_value": 5, 
      "price": 99 
     }, 

     { 
      "name": "Mario's" , 
      "rating_count": 23, 
      "rating_value": 6, 
      "price": 7 
     }, 

     { 
      "name": "Colazione e Roma" , 
      "rating_count": 52, 
      "rating_value": 4, 
      "price": 7 
     } 

    ]; 

まず私は、キーpriceに降順配列をソートしたいです。いくつかのエントリが同じ価格を持っている場合は、rating_valueに応じて昇順にソートしたいのですが。同一のpriceと同じrating_valueのエントリがある場合、昇順に並べ替えるのはrating_countです。

どうすればこの問題を解決できますか?

答えて

1

に応じて方向をソートすることができます。

var array = [{ "name": "Paolos Pizza", "rating_count": 20, "rating_value": 5, "price": 7 }, { "name": "Bella Italia", "rating_count": 55, "rating_value": 3, "price": 7 }, { "name": "Mama Mia", "rating_count": 2, "rating_value": 5, "price": 99 }, { "name": "Mario's", "rating_count": 23, "rating_value": 6, "price": 7 }, { "name": "Colazione e Roma", "rating_count": 52, "rating_value": 4, "price": 7 }]; 
 

 
array.sort(function (a, b) { 
 
    return b.price - a.price || 
 
     a.rating_value - b.rating_value || 
 
     a.rating_count - b.rating_count; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');

1

これはあなたのソリューションです:

arr.sort(function(a,b) { 
    if(a.price != b.price) return a.price < b.price; 
    if(a.rating_value != b.rating_value) return a.rating_value < b.rating_value; 
    return a.rating_count < b.rating_count; 
}); 

あなたがlogical OR||と比較パーツをチェーンとsortオーダーコールバックの結果としての違いを取ることができます。..

+0

あなたはそれを試してみましたか?動いていない – murli2308

関連する問題