我的问题是我有两个要以相同顺序排序的数组。
它们如下:
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
也是如此。我可以创建一个新数组,但是从一开始我就遇到同样的问题。
我真的很坚持,非常感谢您的帮助,谢谢您。
编辑: objects数组包含4个对象。
答案 0 :(得分:0)
在对zorder排序之前,您可以使用zorder值作为键创建对象的Map。
然后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.log('zorder', zorder)
console.log('objects', objects)