Arrays 在Typescript中解构嵌套对象数组

Arrays 在Typescript中解构嵌套对象数组,arrays,typescript,nested,destructuring,Arrays,Typescript,Nested,Destructuring,我有三个嵌套的类 级别1=章节对象 export class Chapter { constructor() { this.groups = new Array<Group>(); } chapterID: number; chapterDescription: string; groups: Array<Group>; } 我从后端接收以下阵列: [ { "chapterID": 1, "chapt

我有三个嵌套的类

级别1=章节对象

export class Chapter {

  constructor() {
    this.groups = new Array<Group>();
  }

  chapterID: number;
  chapterDescription: string;
  groups: Array<Group>;
}
我从后端接收以下阵列:

[
{
  "chapterID": 1,
  "chapterDescription": "CHAPTER A",
  "groups": [
  {
    "chapterID": 1,
    "groupID": 37,
    "groupDescription": "GROUP 37",
    "subGroups": [
    {
      "chapterID": 1,
      "groupID": 37,
      "subGroupID": 1,
      "subGroupDescription": "Subgroup 1"
    },
    {
      "chapterID": 1,
      "groupID": 37,
      "subGroupID": 21,
      "subGroupDescription": "SubGroup 21"
    },
    {
      "chapterID": 1,
      "groupID": 37,
      "subGroupID": 23,
      "subGroupDescription": "SubGroup 23"
    }]
  }]
},
{
  "chapterID": 2,
  "chapterDescription": "CHAPTER B",
  "groups": [
  {
    "chapterID": 2,
    "groupID": 7,
    "groupDescription": "GROUP 7",
    "subGroups": [
    {
      "chapterID": 2,
      "groupID": 7,
      "subGroupID": 23,
      "subGroupDescription": "Subgroup 23"
    },
    {
      "chapterID": 2,
      "groupID": 7,
      "subGroupID": 1,
      "subGroupDescription": "Subgroup 1"
    },
    {
      "chapterID": 2,
      "groupID": 7,
      "subGroupID": 8,
      "subGroupDescription": "Subgroup 8"
    },
    {
      "chapterID": 2,
      "groupID": 7,
      "subGroupID": 13,
      "subGroupDescription": "Subgroup 13"
    }]
  },
  {
    "chapterID": 2,
    "groupID": 5,
    "groupDescription": "GROUP 5",
    "subGroups": [
    {
      "chapterID": 2,
      "groupID": 5,
      "subGroupID": 8,
      "subGroupDescription": "Subgroup 8"
    },
    {
      "chapterID": 2,
      "groupID": 5,
      "subGroupID": 3,
      "subGroupDescription": "Subgroup 3"
    }]
  },
  {
    "chapterID": 2,
    "groupID": 36,
    "groupDescription": "GROUP 36",
    "subGroups": [
    {
      "chapterID": 2,
      "groupID": 36,
      "subGroupID": 9,
      "subGroupDescription": "Subgroup 9"
    },
    {
      "chapterID": 2,
      "groupID": 36,
      "subGroupID": 3,
      "subGroupDescription": "Subgroup 3"
    },
    {
      "chapterID": 2,
      "groupID": 36,
      "subGroupID": 8,
      "subGroupDescription": "Subgroup 8"
    }]
  }]
}]
现在,我想将这些数据映射到章节、组和子组的单独数组,但不使用嵌套属性。 要获取章节对象数组,我可以执行以下操作:

const chapters = data.map((c) => {
  return { "chapterID": c.chapterID, "chapterDescription": c.chapterDescription }
});
但是我如何将第二层和第三层数据分别分解为这样的组和子组数组呢?将子组数组属性保留在组之外

//团体

[
{
  "chapterID": 1,
  "groupID": 37,
  "groupDescription": "GROUP 37"
},
{
  "chapterID": 2,
  "groupID": 7,
  "groupDescription": "GROUP 7"
},
{
  "chapterID": 2,
  "groupID": 5,
  "groupDescription": "GROUP 5"
},
{
  "chapterID": 2,
  "groupID": 36,
  "groupDescription": "GROUP 36"
}]
//子群

[
{
  "chapterID": 1,
  "groupID": 37,
  "subGroupID": 1,
  "subGroupDescription": "Subgroup 1"
},
{
  "chapterID": 1,
  "groupID": 37,
  "subGroupID": 21,
  "subGroupDescription": "SubGroup 21"
},

...

{
  "chapterID": 2,
  "groupID": 36,
  "subGroupID": 8,
  "subGroupDescription": "Subgroup 8"
}]
问题描述的更新: 让我在这里澄清我的目标。我从后端接收到的数据用于具有3个级别的树视图(章节->组-子组)。每章可以包含一个或多个组。一个组只能属于一个章节。每个组可以包含一个或多个子组。一个子组只能属于一个组。 在treeview旁边,我还想要3个包含相同数据的级联组合框。treeview选择中的更改应反映在组合框中,反之亦然。这意味着:如果触发了nodeClick事件,则组合框中的选择应相应更改。另一方面,如果我更改其中一个组合框的选择,则应该在树视图中选择此唯一节点。所以我想:由于我已经从后端接收到了所有可用的数据,我可以以某种方式“分解”原始数组,以便填充组合框。我明确地说“解构”,因为我认为我的解决方案是这样的。这种方法的任何其他想法都是非常受欢迎的。我可以在foreach循环中完成,但我正在寻找一种更有效的方法。
提前感谢您让我走上正轨…

这看起来像是个X/Y问题。
[
{
  "chapterID": 1,
  "groupID": 37,
  "groupDescription": "GROUP 37"
},
{
  "chapterID": 2,
  "groupID": 7,
  "groupDescription": "GROUP 7"
},
{
  "chapterID": 2,
  "groupID": 5,
  "groupDescription": "GROUP 5"
},
{
  "chapterID": 2,
  "groupID": 36,
  "groupDescription": "GROUP 36"
}]
[
{
  "chapterID": 1,
  "groupID": 37,
  "subGroupID": 1,
  "subGroupDescription": "Subgroup 1"
},
{
  "chapterID": 1,
  "groupID": 37,
  "subGroupID": 21,
  "subGroupDescription": "SubGroup 21"
},

...

{
  "chapterID": 2,
  "groupID": 36,
  "subGroupID": 8,
  "subGroupDescription": "Subgroup 8"
}]