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

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

通過 JavaScript 中給定的不完整訂單數組對對象數組進行排序

通過 JavaScript 中給定的不完整訂單數組對對象數組進行排序

守候你守候我 2023-08-18 17:13:05
我有一個對象數組:var items = [   {      "id":"sugar",      "type": 'eatables'   },   {      "id":"petrol",      "type": 'utility'   },   {      "id":"apple",      "type": 'fruits'   },   {      "id":"mango",      "type": 'fruits'   },   {      "id":"book",      "type": 'education'   }];現在我有另一個訂單數組,我想借助它對items數組進行排序:var orders = [   {      "id":"sugar",      "order":5   },   {      "id":"book",      "order":1   }];現在,到目前為止,我在邏輯上所嘗試的是,我放置了太多循環,以至于完全造成了混亂。誰能建議我為此提供一個簡短且優化的邏輯?
查看完整描述

2 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

一種方法可能是創建一個字典,該字典將保留order每個元素的 。另外,我還迭代了整個items數組來存儲不在數組中的元素的位置orders。


首先,我將聲明一個保留整個訂單的數組,即一個包含元素的數組。1..N


var orderNumbers = Array.from({length: items.length}, (_, v) => v + 1);

然后我開始通過迭代數組來創建字典orders并從中刪除訂單orderNumbers。


最后一步是迭代items數組并使用shift方法到"pop"第一個元素。


最終的字典看起來像


{

  "sugar": 2,

  "book": 3,

  "petrol": 1,

  "apple": 4,

  "mango": 5

}

在此代碼中,我使用了一本字典,因為它的復雜性lookup為.O(1)


var items = [ { "id":"sugar", "type": 'eatables' }, { "id":"petrol", "type": 'utility' }, { "id":"apple", "type": 'fruits' }, { "id":"mango", "type": 'fruits' }, { "id":"book", "type": 'education' } ], orders = [ { "id":"sugar", "order":2 }, { "id":"book", "order":3 } ], orderNumbers = Array.from({length: items.length}, (_, v) => v + 1);


var ordersDict = orders.reduce((acc, item) => { 

     acc[item.id] = item.order;

     

     //remove from order numbers

     let index = orderNumbers.findIndex(el => el == item.order);

     orderNumbers.splice(index, 1);

     

     return acc;

}, {});


for(let i = 0; i < items.length; i++){

  if(!ordersDict.hasOwnProperty(items[i].id)){

    ordersDict[items[i].id] = orderNumbers[0];

    orderNumbers.shift();

   }

}


//sort the array

items.sort((a,b) => ordersDict[a.id] - ordersDict[b.id]);


console.log(items);


查看完整回答
反對 回復 2023-08-18
?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

let oorder = new Object();


orders.map(item=>{oorder[item.id]=item.order});


var new_items = [];


items.map(item=>{new_items[oorder[item.id]-1]=item});


查看完整回答
反對 回復 2023-08-18
  • 2 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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