亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過另一個數組(長度較短)對關聯 javascript 數組進行排序的最有效方法?

通過另一個數組(長度較短)對關聯 javascript 數組進行排序的最有效方法?

慕田峪7331174 2021-12-23 16:06:29
我有一個看起來像這樣的數組: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);


查看完整回答
反對 回復 2021-12-23
  • 1 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號