1

我有一个充满需要排序的对象的数组,但是我似乎无法让它工作。通常我只会做一个简单的 sort() 方法,它适用于对单列进行排序,但是在这种情况下,我需要先按一列排序,然后再按一秒排序。

为了让这更容易理解,假设我有一个类似于这个的对象数组:

{ Name: 'Alfred', Total: 4, Project: 'Foobar' }

现在在这个例子中,我将如何首先按名称对这些对象的数组进行排序,然后按总计?我考虑过这样做:

myArray = myArray.sort(function(a,b){return (a.Name + a.Total) > (b.Name + b.Total)});

但是,我不确定解决此问题的最佳方法是什么。一些建议将不胜感激。

4

2 回答 2

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

缩小版:

myArray.sort(function(a,b){return a.Name>b.Name?1:a.Name<b.Name?-1:a.Total>b.Total?1:a.Total<b.Total?-1:0});
于 2012-10-15T09:17:01.177 回答
0
myArray = myArray.sort(function(a, b) {
  var ret = a.Name.localeCompare(b.Name);
  if (ret == 0) {
     if (a.Total > b.Total) {
         return 1;
     } else if (a.Total < b.Total) {
         return -1;
     }
  }
  return ret; 
});
于 2012-10-15T09:16:23.620 回答