通过另一个数组(长度较短)对关联 javascript 数组进行排序的最有效方法?

我有一个看起来像这样的数组:


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)

但它抛出了我的其他值,我想我可以遍历并重建数组,但我很好奇是否有更有效的方法。


慕田峪7331174
浏览 120回答 1
1回答

摇曳的蔷薇

您可以为排序顺序获取一个对象,并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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript