我正在尝试使用Jquery.ajax对我调用的Feed进行排序。我正在尝试按Feed中数组中的值的数量对其进行排序。
例如,在这个Feed中,我希望按照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()}))
有关如何按数组中的#值排序的任何建议?感谢任何可以帮助或指导我朝着正确方向前进的人。
答案 0 :(得分:4)
如果使用数组的length属性,您的方法似乎有效:
data.sort(sort_by('NFLteams', false, function(a){return a.length}))
参见JsBin:http://jsbin.com/eWafEMe/1/edit
答案 1 :(得分:1)
像这样的简单功能就可以解决问题。
data.sort(function(a,b){
return b.NFLteams.length - a.NFLteams.length;
});
答案 2 :(得分: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);
});
的控制台输出
答案 3 :(得分:0)
您可以尝试underscore's
sortBy
:
_.sortBy(i, function(team){ return team['NFLteams'].length }).reverse();
其中i
是您的输入数组。