Сортировка массива по другому массиву - PullRequest
2 голосов
/ 04 августа 2011

У меня есть два массива, основной включает в себя что-то вроде 300 значений:

var main = [ 182, 928, 192, 111, 493, 1100, 3 ] ..

Вторичное значение включает 10 значений, но каждое значение является массивом:

var secondary = [{"id" : 3, "category" : "animals"}, {"id" : 111, "category" : "water"}] ..

У меня вопрос, как я могу отсортировать secondary array по его идентификаторам в соответствии со значениями в main array?

Ответы [ 2 ]

4 голосов
/ 04 августа 2011

Вы можете использовать следующий код, если вы структурируете второй массив, как упомянуто. В решении используется indexOf, который может присутствовать не во всех браузерах. Mozilla предоставляет реализацию для indexOf здесь .

var main = [ 182, 928, 192, 111, 493, 1100, 3 ];
var secondary = [{"id" : 3, "category" : "animals"}, {"id" : 111, "category" : "water"}];

secondary.sort(function(a, b) {
    return main.indexOf(a["id"]) - main.indexOf(b["id"]);
});
0 голосов
/ 04 августа 2011

Сначала создайте некоторый инвертированный индекс для массива main:

var main_map = {};
for(var i = main.length;i--; ) {
    main_map[main[i]] = i;
}

Затем вы можете передать пользовательскую функцию сортировки в sort [docs] примерно так:

secondary.sort(function(a, b) {
    return main_map[a["id"]] - main_map[b["id"]];
});

Кроме того, вы можете создать инвертированный индекс для массива secondary и выполнить цикл по массиву main, но ваш массив secondaryнамного меньше, это будет менее эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...