gpt4 book ai didi

javascript - 通过Javascript中给定的不完整订单数组对对象数组进行排序

转载 作者:行者123 更新时间:2023-12-03 06:54:01 27 4
gpt4 key购买 nike

我有一个对象数组:

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
}
];
现在,到目前为止,我在逻辑中尝试的是,我放置了如此多的循环,以至于完全造成困惑。
任何人都可以为此建议我使用简短且优化的逻辑吗?

最佳答案

一种方法是创建一个字典来保存 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);

关于javascript - 通过Javascript中给定的不完整订单数组对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64943477/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com