2014-09-01 60 views
0

我有一組項目。按組和標題對數組排序

var myArray = [ 
    {group: 'A', title: 'Title 1'}, 
    {group: 'B', title: 'Title 2'}, 
    {group: 'C', title: 'Title 3'}, 
    {group: 'A', title: 'Title 4'}, 
    {group: 'A', title: 'Title 5'}, 
    {group: 'B', title: 'Title 6'}, 
    {group: 'C', title: 'Title 7'} 
]; 

我想排序數組首先按組標題排序(按字母順序排列)。

我知道我可以爲每個組創建不同的數組,然後對它們進行排序,但我認爲這應該在一個.sort函數中完成。

+0

您可以使用比較器功能。很簡單 - 嘗試一下。 – MightyPork 2014-09-01 15:58:30

+2

您是否已將邏輯放入['.sort'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)函數?如果是這樣,你遇到了什麼問題? – 2014-09-01 15:58:36

回答

2

只是排序這兩個屬性,小組第一,那麼標題

myArray.sort(function(a,b) { 
    var res = a.group.localeCompare(b.group); 
    if (res != 0) return res; 
    return a.title.localeCompare(b.title); 
}); 

FIDDLE

localeCompare會按字母順序排序,但請注意,這樣做的字母排序時Title 16會來Title 2之前。

+0

如果組的定位是預定義的,您將如何更改此功能。組[B,A,C]的順序? – puppeteer701 2014-10-10 10:45:36

0

這應該工作:

myArray.sort(
    function(a, b) { 
     if (a.group === b.group) { 
      if (a.title < b.title) { 
       return -1; 
      } else if (a.title > b.title) { 
       return 1; 
      } else return 0; 
     } else if (a.group < b.group) { 
      return -1; 
     } else return 1; 
    } 
); 

僅供參考MDN有很多關於這個問題的信息的。