2 回答

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);

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});
添加回答
舉報