Normalizr:规范化深层嵌套项

问题描述

我有一个这样的数据数组

[
  {
    "id": "root_01","parents": [
      {
        "id": "parent_1","childrens": [
          {
            "id": "child_01","name": "ABC","group": "group_a"
          },{
            "id": "child_02","name": "BBC","group": "group_b"
          }
        ]
      },{
        "id": "parent_2","childrens": [
          {
            "id": "child_03","name": "CCD",{
            "id": "child_04","name": "EEF","group": "group_c"
          }
        ]
      }
    ]
  },{} // same as prevIoUs
]

并且我正在尝试摆脱所有父数据并仅捕获并合并这样的子项:

[
  {
    "id": "child_01","group": "group_a"
  },{
    "id": "child_02","group": "group_b"
  },{
    "id": "child_03",{
    "id": "child_04","group": "group_c"
  }
]

但是在阅读了 normalizr 文档后,我有点困惑,因为我找不到这种示例,所以有人可以建议我是否可以使用 normalizr 或任何更好的主意来制作?

谢谢

解决方法

Recusrion 正是您所需要的:

const arr = [ { "id": "root_01","parents": [ { "id": "parent_1","childrens": [ { "id": "child_01","name": "ABC","group": "group_a" },{ "id": "child_02","name": "BBC","group": "group_b" } ] },{ "id": "parent_2","childrens": [ { "id": "child_03","name": "CCD",{ "id": "child_04","name": "EEF","group": "group_c" } ] } ] }];

const flatten = arr => arr.flatMap(o=>o.parents ? flatten(o.parents) : o.childrens ? flatten(o.childrens) : o);

console.log(flatten(arr));