Сортировка массива с другим наиболее эффективно

1

Из-за плохо написанного кода. Я должен сортировать массив и основывать на этой сортировке, сортировать другой массив в том же порядке. Например:

foo =[ ['tom', 20, {teacher: 'may', class: 'math'}],
       ['Ann', 21, {teacher: 'Joe', class: 'CS'}],
       ['tony', 22, {teacher: 'may', class: 'math'}]
     ]
bar = [{extraPara: 'ran1', Sequence 2},
       {extraPara: 'ran2', Sequence 1},
       {extraPara: 'ran3', Sequence 3},
      ]

Я хочу сортировать бар с помощью Sequence. И я хочу отсортировать базу foo на этой последовательности. В принципе, оба массива должны быть в одном большом массиве, но из-за плохого кодирования он отделен. Однако у меня нет времени, чтобы написать всю структуру.

Каков наиболее эффективный способ сделать это?

Я могу легко сортировать панель:

 bar = _.sortBy(bar, function(item) {return item.Sequence})

Единственный способ, которым я знаю, как это сделать, - написать алгоритм сортировки сам, и всякий раз, когда я меняю порядок бара, я буду использовать индекс и сделать то же самое для foo. Однако это звучит очень неэффективно, и читаемость действительно плохая

какие-нибудь советы?

  • 0
    Есть ли «внешний ключ» между двумя массивами?
  • 0
    что значит "в основном оба массива должны быть в одном большом массиве" ? можешь добавить пример?
Показать ещё 2 комментария
Теги:

1 ответ

3
Лучший ответ

Вы можете использовать вспомогательный массив с индексами и отсортировать их с помощью последовательности и сопоставить массив foo с отсортированными индексами как новый отсортированный массив.

var foo = [['tom', 20, { teacher: 'may', class: 'math' }], ['Ann', 21, { teacher: 'Joe', class: 'CS' }], ['tony', 22, { teacher: 'may', class: 'math' }]],
    bar = [{ extraPara: 'ran1', Sequence: 2 }, { extraPara: 'ran2', Sequence: 1 }, { extraPara: 'ran3', Sequence: 3 }],
    order = bar.map(function (_, i) {
        return i;
    }).sort(function (a, b) {
        return bar[a].Sequence - bar[b].Sequence;
    }),
    result = order.map(function (i) {
        return foo[i];
    });

console.log(order);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню