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

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)

到目前为止,我在逻辑中所尝试的是我放置了太多循环,以至于完全造成了混乱。

任何人都可以为此提供简短且优化的逻辑吗?

Mih*_*nut 4

一种方法可能是创建一个字典,该字典将保留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)