Сортировка массива в том же порядке, что и другой

Моя проблема в том, что у меня есть два массива, которые нужно отсортировать в одном порядке.

Вот они:

objects = [obj1, obj2, obj3, obj4];
zorder = [1, 3, 4, 2]

Мне нужно заказать zorder, чтобы это был 1, 2, 3, 4,, это довольно просто, но мне нужно, чтобы объекты были отсортированы таким же образом, например:

objects = [obj1, obj4, obj2, obj3]
zorder = [1, 2, 3, 4]

Я знаю, что этот вопрос задавали раньше, но ни один из ответов у меня не работает. Все ответы, которые я нашел, превратят это в следующее:

objects = [{name:obj1, order:1}, 
           {name:obj2, order:3},
           {name:obj3, order:4},
           {name:obj4, order:2}]

а затем отсортируйте его оттуда. Я делаю это не мочь, потому что массив objects должен оставаться в точности таким же, за исключением порядка, то же самое верно и для zorder. Я могу создать новый массив, но тогда у меня с самого начала возникает та же проблема.

Я действительно застрял на этом и буду очень благодарен за вашу помощь, заранее спасибо.

Редактировать: массив объектов содержит 4 объекта.

🤔 А знаете ли вы, что...
JavaScript позволяет создавать мобильные приложения для iOS и Android с использованием фреймворков, таких как React Native и NativeScript.


56
1

Ответ:

Решено

Вы можете создать карту объектов, используя значения zorder в качестве ключей перед сортировкой zorder.

Затем отсортированный массив Array # sort () zorder и Array # map, возвращающий связанный объект из объекта Map

let objects = [{id:100}, {id:300}, {id:400}, {id:200}],
zorder = [1, 3, 4, 2],
map = zorder.reduce((a, c, i) => a.set(c, objects[i]), new Map);

zorder.sort((a, b) => a - b);

objects = zorder.map(n => map.get(n));

console.info('zorder', zorder)
console.info('objects', objects)