Sto*_*per 5 javascript arrays sorting algorithm object
我有一个对象数组:
var items = [
{
"id":"sugar",
"type": 'eatables'
},
{
"id":"petrol",
"type": 'utility'
},
{
"id":"apple",
"type": 'fruits'
},
{
"id":"mango",
"type": 'fruits'
},
{
"id":"book",
"type": 'education'
}
];
Run Code Online (Sandbox Code Playgroud)
现在我有另一个订单数组,我想借助它对items数组进行排序:
var orders = [
{
"id":"sugar",
"order":5
},
{
"id":"book",
"order":1
}
];
Run Code Online (Sandbox Code Playgroud)
到目前为止,我在逻辑中所尝试的是我放置了太多循环,以至于完全造成了混乱。
任何人都可以为此提供简短且优化的逻辑吗?
一种方法可能是创建一个字典,该字典将保留order每个元素的 。另外,我还迭代了整个items数组来存储不在数组中的元素的位置orders。
首先,我将声明一个保留整个订单的数组,即一个包含元素的数组。1..N
var orderNumbers = Array.from({length: items.length}, (_, v) => v + 1);
Run Code Online (Sandbox Code Playgroud)
然后我开始通过迭代数组来创建字典orders并从中删除订单orderNumbers。
最后一步是迭代items数组并使用shift方法到"pop"第一个元素。
最终的字典看起来像
{
"sugar": 2,
"book": 3,
"petrol": 1,
"apple": 4,
"mango": 5
}
Run Code Online (Sandbox Code Playgroud)
在此代码中,我使用了一本字典,因为它的复杂性lookup为.O(1)
var orderNumbers = Array.from({length: items.length}, (_, v) => v + 1);
Run Code Online (Sandbox Code Playgroud)