У меня есть этот объект, который я хочу реструктурировать, как показано на желаемом выходе ниже. 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",
      }
  ]
0
Dilhan Bhagat 14 Окт 2020 в 17:52

2 ответа

Лучший ответ

Используя 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);
1
Derek.W 14 Окт 2020 в 14:58
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 output = Object.keys(Shopping).map(name => ({
  data: Shopping[name].map(o => ({
    ...o,
    ingrId: `${Date.now()}`
  })),
  name
}));

console.log(output)
.as-console-wrapper {
  height: 100vh !important;
  max-height: 100vh !important;
}
0
Adam Azad 14 Окт 2020 в 15:09