Может ли JavaScript или jQuery сортировать массив JSON по нескольким критериям? - PullRequest
4 голосов
/ 23 августа 2011

У меня есть JSON-массив потенциальных результатов для списка автозаполнения.

Список определен как:

var fundList = [ //there's lots more than this
    { "name": "Pension Managed Fund 1" },
    { "name": "Managed Property Fund 2" },
    { "name": "Retirement Managed Fund 3" },
    { "name": "Retirement Managed Fund 4" }
]

Мне нужно отсортировать список по алфавиту, но он также должен быть упорядочен по значению, введенному в текстовое поле (которое вызывает автозаполнение)

Так, например, если пользователь введет «Managed» в текстовое поле, приведенный выше список будет отсортирован следующим образом:

Managed Property Fund 2

Pension Managed Fund 1

Retirement Managed Fund 3

Retirement Managed Fund 4

Если они наберут «Выход на пенсию», список будет отсортирован:

Retirement Managed Fund 3

Retirement Managed Fund 4

Managed Property Fund 2

Pension Managed Fund 1

Если набрать «Фонд», порядок будет в обычном алфавитном порядке:

Managed Property Fund 2

Pension Managed Fund 1

Retirement Managed Fund 3

Retirement Managed Fund 4

Есть ли какая-либо встроенная функциональность в JavaScript или jQuery, которая сделает это?

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Array.prototype.sort может принимать функцию в качестве компаратора; Я предполагаю, что вам нужно отсортировать каждую строку, содержащую поисковый запрос, перед каждой строкой без него и разорвать связи в алфавитном порядке:

var query = 'Managed';
fundList.sort(function(a, b)
{
    var match_a = a.name.indexOf(query) >= 0;
    var match_b = b.name.indexOf(query) >= 0;
    if(match_a && !match_b)
        return -1;
    if(!match_a && match_b)
        return 1;
    if(a.name < b.name)
        return -1;
    if(a.name > b.name)
        return 1;
    return 0;
});

Используйте это как отправную точку; вместо String.prototype.indexOf , чтобы выяснить, соответствует ли строка запросу, по крайней мере, игнорировать регистр и интервал.

1 голос
/ 23 августа 2011

javascript имеет метод сортировки массива, который может принимать функцию в качестве параметра, что позволит вам определить, как вы хотите отсортировать вещи

например

var fundList = [ //there's lots more than this
    { "name": "Pension Managed Fund 1" },
    { "name": "Managed Property Fund 2" },
    { "name": "Retirement Managed Fund 3" },
    { "name": "Retirement Managed Fund 4" }
]

funcList.sort(function(a, b){
 if (a == b)
 {
   return 0;
 }

 if (SOME CRITERIA TO SORT a AT A LOWER INDEX THEN b)
 {
   return -1;
 }

 if (SOME CRITERIA TO SORT b AT A LOWER INDEX THEN a)
 {
    return 1;
 }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...