1

我正在尝试对使用 Jquery.ajax 调用的提要进行排序。我正在尝试按提要中数组中值的数量对其进行排序。

例如,在此提要中,我想按 NFL 球队的数量按降序对其进行排序,因此它将重新排序为加利福尼亚州、新泽西州、马萨诸塞州:

[
   {
      "title":"New Jersey",
      "NFLteams":[
         {
            "Name":"Jets",
            "Conference":"AFC",
         },
         {
            "Name":"Giants",
            "Conference":"NFC",
         }
         ]
   },
   {
      "title":"Massachusetts",
      "NFLteams":[
         {
            "Name":"Patriots",
            "Conference":"AFC",
         }
         ]
   },
   {
      "title":"California",
      "NFLteams":[
         {
            "Name":"Raiders",
            "Conference":"AFC",
         },
         {
            "Name":"49ers",
            "Conference":"NFC",
         },
         {
            "Name":"Chargers",
            "Conference":"AFC",
         }
         ]
   }
]

我试过这样的代码(来自这个线程Sorting an array of JavaScript objects),但它不起作用(即使我把它设为 NFLteams.length):

   var sort_by = function(field, reverse, primer){
   var key = function (x) {return primer ? primer(x[field]) : x[field]};

   return function (a,b) {
      var A = key(a), B = key(b);
      return ( (A < B) ? -1 : ((A > B) ? 1 : 0) ) * [-1,1][+!!reverse];                  
   }
   }
   data.sort(sort_by('NFLteams', false, function(a){return a.toUpperCase()}))    

关于如何按数组中的值进行排序的任何建议?感谢任何可以帮助或指出我正确方向的人。

4

4 回答 4

4

如果您使用数组的长度属性,您的方法似乎有效:

data.sort(sort_by('NFLteams', false, function(a){return a.length}))

见 JsBin:http: //jsbin.com/eWafEMe/1/edit

于 2013-09-02T15:54:24.777 回答
1

像这样的简单功能就可以解决问题。

data.sort(function(a,b){
     return b.NFLteams.length - a.NFLteams.length;
});

http://jsfiddle.net/x9d2J/

于 2013-09-02T15:52:21.180 回答
1

在您的排序函数中,将比较反转为以降序返回:

.sort(function(team1, team2) {
    return team2.NFLteams.length - team1.NFLteams.length;
});

或将结果乘以 -1:

.sort(function(team1, team2) {
    return -1 * (team1.NFLteams.length - team2.NFLteams.length);
});

查看此小提琴的控制台输出

于 2013-09-02T15:52:45.080 回答
0

你可以试试underscore's sortBy

_.sortBy(i, function(team){ return team['NFLteams'].length }).reverse();

i你的输入数组在哪里。

小提琴:http: //jsfiddle.net/kMbsW/

于 2013-09-02T15:49:38.520 回答