2013-09-02 2 views
1

Я пытаюсь сортировать канал, который я вызывал, используя Jquery.ajax. Я пытаюсь сортировать его по количеству значений в массиве в фиде.Сортировка json по длине массива

К примеру, в этот канал, я хочу, чтобы отсортировать его по # команд НФЛ в нисходящем, так что это будет повторно сортируется в Калифорнии, Нью-Джерси, Массачусетс:

[ 
    { 
     "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

хорошо, если эти значения сохраняются и извлекаются из БД будет легче COUNT и сравнить то сортировка, просто идея. – Twocode

ответ

0

Вы можете попробовать underscore'ssortBy:

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

где i это ваш входной массив.

скрипку: http://jsfiddle.net/kMbsW/

1

Простая функция, как это будет делать трюк.

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

http://jsfiddle.net/x9d2J/

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); 
}); 

Посмотреть консоль выход от this fiddle

4

Ваш метод, кажется, работает, если вы используете свойство длины массива:

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

См JsBin: http://jsbin.com/eWafEMe/1/edit

+0

работал как шарм! благодаря! – ncdev

+0

@ncdev поблагодарил Tibos (и остальную часть StackOverflow), отметив этот ответ как принятый :) – dc5

Смежные вопросы