以与另一个数组相同的顺序对数组进行排序

时间:2018-11-10 22:13:37

标签: javascript arrays

我的问题是我有两个要以相同顺序排序的数组。

它们如下:

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个对象。

1 个答案:

答案 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)