如何将对象重组为特定格式的对象数组?

问题描述

我有一个要重组的对象,如下面所需的输出所示。所需输出中的IngriId只是Date.Now(),我正在努力重新排列这对我来说似乎是不可能的。可以使用javascript来完成此操作,因为我对此很陌生并且发现很难实现?

输入:

const Shopping = {
    "meatsOutput": [
      {
        "val": "Chicken breast"
      }
    ],"spicesOutput": [
      {
        "amount": "½ tsp","val": "paprika"
      }
    ],"dairyOutput": [
      {
        "amount": "1/2 Cup","val": "yogurt"
      },{
        "amount": "1/2 teaspoon","val": "heavy cream"
      }
    ]
  }

所需的输出

const ShoppingList = [
      {
          "data": [{
              "value": "Chicken breast","ingrId": "202237423fm16787",}],"name": "meatsOutput",},{
          "data": [{
              "amount": "½ tsp","value": "paprika","ingrId": "20223742381r787","name": "spicesOutput",{
          "data": [{
              "amount": "1/2 Cup","value": "yogurt","ingrId": "202237423816787",],"name": "dairyOutput",}
  ]

解决方法

使用Object.entries,可以生成[key,value]对数组,然后使用Array.prototype.map,可以将该数组更改为所需的结果。

const input = {
  "meatsOutput": [{
    "val": "Chicken breast"
  }],"spicesOutput": [{
    "amount": "½ tsp","val": "paprika"
  }],"dairyOutput": [{
      "amount": "1/2 Cup","val": "yogurt"
    },{
      "amount": "1/2 teaspoon","val": "heavy cream"
    }
  ]
};

const result = Object.entries(input).map(([key,value]) => ({
  name: key,data: value.map((item) => ({
    ...item,ingrId: Date.now()
  }))
}));
console.log(result);