2016-04-18 18 views
1

Kann mir jemand mit Array.sort() helfen? Ich kann nach einem Wert sortieren (z. B. return a < b), aber nicht mit mehr Werten. Ich brauche diesen Fall, wenn einige primäre Werte das gleiche Ergebnis haben.JavaScript Array.sort() mit mehreren Tasten

z. Array:

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 
     } 

    ]; 

Zuerst möchte ich das Array sortieren, auf dem Schlüssel price absteigend. Wenn einige Einträge den gleichen Preis haben, dann sortiere ich sie aufsteigend nach rating_value. Wenn einige Einträge dieselbe price und dieselbe rating_value haben, dann möchte ich aufsteigend auf rating_count sortieren.

Wie kann ich das lösen?

Antwort

1

Sie können Kette die Vergleichsteile mit logical OR|| und nehmen Sie die Differenz als Ergebnis für den sort um Rückruf.

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

Das ist Ihre Lösung:

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; 
}); 

Sie können dementsprechend Richtung machen Sortierung ..

+0

Haben Sie es versucht? es funktioniert nicht – murli2308

Verwandte Themen