2015-03-04 22 views
24

I teraz po prostu pierwsze 3 Przedmiot tablicy i mapę nad nimi:Sortuj tablicę według atrybutu

<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> 

Każdy champ posiada atrybut level (champ.level).

Jak mogę posortować dane wyjściowe do champ.leveldescending i wyciąć pierwsze 3?

Odpowiedz

65

Korzystając Array.prototype.sort() ze zwyczajem porównanie funkcji, aby wykonać malejąco porządek pierwszy:

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

Nawet ładniej z ES6:

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

Dzięki, że rozwiązanie ES6 wygląda tak pysznie! –

8

Napisz własną funkcję porównania:

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

Aby go użyć:

champions.sort(compare).slice(0,3).map(function(champ) { 
Powiązane problemy