2015-03-04 39 views
24

tôi ngay bây giờ chỉ nhận được 3 đối tượng đầu tiên của một mảng và bản đồ qua chúng:Sắp xếp mảng bởi thuộc tính

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

Mỗi champ có một thuộc tính level (champ.level).

Làm cách nào để sắp xếp kết quả đầu ra của mình thành champ.leveldescending và cắt đầu tiên 3?

Trả lời

65

Sử dụng Array.prototype.sort() với một phong tục so sánh chức năng để làm giảm dần trước sắp xếp:

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

Thậm chí đẹp hơn với ES6:

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

Cảm ơn, giải pháp ES6 trông rất ngon! –

8

Viết chức năng so sánh của riêng bạn:

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

Để sử dụng nó:

champions.sort(compare).slice(0,3).map(function(champ) { 
Các vấn đề liên quan