JS Reduce 带父参数

JS Reduce with parent parameter

我正在尝试使用我的 reduce 函数解决我的最后一个问题,将嵌套的 JSON 对象转换为平面列表以便于搜索。

以JSON下方

    {
  "MovementPatterns": [
    {
      "Id": "",
      "Name": "Warm-up",
      "Exercises": [
        {
          "Id": "",
          "Name": "Lizard Stretch",
          "Level": 1,
          "EquipmentRequired": ""
        },
        {
          "Id": "",
          "Name": "Pigeon Stretch",
          "Level": 1,
          "EquipmentRequired": ""
        },
        {
          "Id": "",
          "Name": "Core Hold",
          "Level": 1,
          "EquipmentRequired": ""
        },
        {
          "Id": "",
          "Name": "Superman",
          "Level": 1,
          "EquipmentRequired": ""
        }
      ]
    },
    {
      "Name": "Horizontal Push",
      "Id": "",
      "Exercises": [
        {
          "Id": "",
          "Name": "Wall Push-up",
          "Level": 0,
          "VideoUrl": "",
          "EquipmentRequired": ""
        },
        {
          "Id": "",
          "Name": "Push-up",
          "Level": 1,
          "EquipmentRequired": ""
        },
        {
          "Id": "",
          "Name": "Tap Push-up",
          "Level": 2,
          "EquipmentRequired": ""
        },
        {
          "Id": "",
          "Name": "Explosive Push-up",
          "Level": 3,
          "EquipmentRequired": ""
        }
      ]
    }
  ]
}

我使用了以下代码:

const exercises = data.MovementPatterns.reduce(
  (a, {Exercises}) => [...a, ...Exercises, ...a],
  [],
);

将每个运动模式中的所有练习扁平化为一个纯粹的练习列表...这很好,但我现在需要在 JSON 中为每个练习包含 PARENT 运动模式 ID,例如

[
        {
          "Id": "",
          "Name": "Lizard Stretch",
          "Level": 1,
          "MovementPatternId": 1,
          "EquipmentRequired": ""
        },
....
        {
          "Id": "",
          "Name": "Wall Push-up",
          "Level": 1,
          "MovementPatternId": 2,
          "EquipmentRequired": ""
        },
]

谁能帮我弄清楚如何使用我的 reduce 函数来做到这一点:)

谢谢

你快接近了。只需将父项的 Id 作为 MovementPatternId 附加到 Exercises.

的每个元素
const exercises = ab.MovementPatterns.reduce(
  (a, { Exercises, Id }) => [
    ...a,
    ...Exercises.map(e => ({ ...e, MovementPatternId: Id }))
  ],
  []
);