2014-09-01 57 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有很多关于这个问题的信息的。