2015-03-04 23 views
24

ho in questo momento solo ottenere i primi 3 oggetto di un array e mappare su di loro:Ordina Array per attributo

<ul className="ItemSearchList"> 
    { 
    champions.slice(0,3).map(function(champ){ 
     return (
     <li key={champ.id} > 
      <div className="media"> 
      <div className="media-left"> 
       <a href="#"> 
       <img className="media-object" src={"http://ddragon.leagueoflegends.com/cdn/5.2.1/img/champion/" + champ.key + ".png"} /> 
       </a> 
      </div> 
      <div className="media-body" > 
       <h4 className="media-heading">{champ.name}</h4> 
       <div> 
       something 
       </div> 
      </div> 
      </div> 
     </li> 
    ) 
    }) 
    } 
</ul> 

Ogni champ ha un attributo level (champ.level).

Come è possibile ordinare la mia uscita su champ.leveldescending e tagliare i primi 3?

risposta

65

Usa Array.prototype.sort() con un costume funzione di confronto per fare il decrescente sorta prima:

champions.sort(function(a, b) { return b.level - a.level }).slice(... 

Anche più bello con ES6:

champions.sort((a, b) => b.level - a.level).slice(... 
+4

Grazie, la soluzione ES6 sembra così deliziosa! –

8

Scrivi la tua funzione di confronto:

function compare(a,b) { 
    if (a.level < b.level) 
    return -1; 
    if (a.level > b.level) 
    return 1; 
    return 0; 
} 

usarlo:

champions.sort(compare).slice(0,3).map(function(champ) { 
Problemi correlati