我有一个看起来像这样的数组:cPrefs = [0:{ id: 5, name: "Sixth thing" }, 1:{ id: 3, name: "Fourth thing" }, 2:{ id: 4, name: "Fifth thing" }, 3:{ id: 0, name: "First thing" }, 4:{ id: 2, name: "Third thing" }, 5:{ id: 1, name: "Second thing" }]我还有另一个排序数组,如下所示:cOrder = ["1", "3", "2", "5"]我需要按第二个数组(具有 id)对第一个数组进行排序,并将未识别的对象放在最后(以任何顺序)。因此,正确的最终排序可能如下所示:[0:{ id: 1, name: "Second thing" }, 1:{ id: 3, name: "Fourth thing" }, 2:{ id: 2, name: "Third thing" }, 3:{ id: 5, name: "Sixth thing" }, 4:{ id: 0, name: "First thing" }, 5:{ id: 4, name: "Fifth thing" }]我不确定实现这一目标的最佳方法。我努力了const output = cOrder.map(i => cPrefs[i].id)但它抛出了我的其他值,我想我可以遍历并重建数组,但我很好奇是否有更有效的方法。
1 回答

摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
您可以为排序顺序获取一个对象,并id使用默认值将 unknown移到最后Infinity。
var cPrefs = [{ id: 5, name: "Sixth thing" }, { id: 3, name: "Fourth thing" }, { id: 4, name: "Fifth thing" }, { id: 0, name: "First thing" }, { id: 2, name: "Third thing" }, { id: 1, name: "Second thing" }],
cOrder = [1, 3, 2, 5],
order = cOrder.reduce((r, k, i) => (r[k] = i + 1, r), {});
cPrefs.sort((a, b) => (order[a.id] || Infinity) - (order[b.id] || Infinity));
console.log(cPrefs);
添加回答
举报
0/150
提交
取消