2015-09-07 227 views
0

我一整天都在閱讀類似的帖子,但無法弄清楚如何通過多個屬性對我的javascript數組進行排序。 我的數組有'名稱'和'類型'屬性。 按名稱排序我現在用:通過Javascript中的多個屬性對對象數組排序

   byNameDesc.sort(function (a, b) { 
        var x = a.name.toLowerCase(); 
        var y = b.name.toLowerCase(); 
        return y < x ? -1 : y > x ? 1 : 0; 
       }); 

很好用。我想增強這個功能。如果'name'是'foo',它應該總是在最上面。我也想按'類型'排序。 所以'foo'應該總是在上面,然後按'name'和'type'排序。

我嘗試這樣做:

   byNameDefault.sort(function (a, b) { 
        if (a.name == 'foo') { 
         return -1; 
        } 
        var x = a.type.toLowerCase(); 
        var y = b.type.toLowerCase(); 
        return x < y ? -1 : x > y ? 1 : 0; 
       }); 

但沒有奏效。

我不知道如何按'名稱'和'類型'進行排序。

任何幫助,非常感謝。

回答

1

對於多個排序標準,您可以從第一個標準到最後一個標準: 如果一個標準的兩個條目不相等,則可以使用結果-1或1從排序函數返回。此外,在最後一個標準中,您對於兩個相等的輸入也可以返回0。

這裏是你的情況的範例:

byNameDefault.sort(function (a, b) { 
    // compare names 
    var na = a.name.toLowerCase(); 
    var nb = b.name.toLowerCase(); 

    if (na !== nb) { 
     if (na === 'foo') 
      return -1; 
     else if (nb === 'foo') 
      return 1; 
     else 
      return na < nb ? -1 : 1; 
    } 

    // compare types 
    return a.type < b.type ? -1 : a.type > b.type ? 1 : 0; 
} 
+0

謝謝您的回答和解釋。我現在明白我在做什麼;) –

相關問題