Из-за плохо написанного кода. Я должен сортировать массив и основывать на этой сортировке, сортировать другой массив в том же порядке. Например:
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. Однако это звучит очень неэффективно, и читаемость действительно плохая
какие-нибудь советы?
Вы можете использовать вспомогательный массив с индексами и отсортировать их с помощью последовательности и сопоставить массив 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; }