Ну, простой ответ будет: «для такого маленького набора данных все, что дешевле, чем бесконечный цикл, будет в основном незаметным».Но давайте попробуем ответить на это «правильно».
Нет порядка или причины для порядка во втором массиве, это просто список внешних ключей (для использования терминологии SQL) в первичных ключах первого массива.,Таким образом, думая о них как о ключах и о том, что нам нужен эффективный поиск этих ключей, хеш-таблица (объект), вероятно, "сортирует" эту самую быструю, в O(n)
стиле (2*n
, действительно), принимая первый массивназывается objArray
, а второй массив называется keyArray
:
// Create a temporary hash table to store the objects
var tempObj = {};
// Key each object by their respective id values
for(var i = 0; i < objArray.length; i++) {
tempObj[objArray[i].id] = objArray[i];
}
// Rebuild the objArray based on the order listed in the keyArray
for(var i = 0; i < keyArray.length; i++) {
objArray[i] = tempObj[keyArray[i]];
}
// Remove the temporary object (can't ``delete``)
tempObj = undefined;
И это должно сделать это.Я не могу придумать ни одного метода, который не требует двух проходов.(Либо один за другим, как этот, либо путем многократного прохождения через массив и splice
извлечения найденных элементов, что может быть дорогостоящим, например, при сортировке в обратном порядке.)