简体   繁体   English

无法推送嵌套数组中子项的数据子项

[英]Cannot Push Data Children of Children in Nested Array

So I have the following Array.所以我有以下数组。 I can push to the parent level and child level however I can't seem to push to Children of Children or deeper.我可以推到父级和子级,但是我似乎无法推到 Children of Children 或更深层次。 Here's the Array:这是数组:

 TREE_DATA: SegmentCategory[] = [
    {
      id: 1,
      name: 'Category 1',
      children: [
        {
          id: 2,
          name: 'Category 1-1',
          children: [
            {
              id: 4,
              name: 'Category 1-1-a',
              children: []
            },
            {
              id: 5,
              name: 'Category 1-1-b',
              children: []
            },
          ]
        },
        {
          id: 6,
          name: 'Category 1-2',
          children: [
            {
              id: 7,
              name: 'Category 1-2-a',
              children: [
                {
                  id: 8,
                  name: 'Category 1-2-1',
                  children: [
                    {
                      id: 9,
                      name: 'Category 1-2-2-a',
                      children: []
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      id: 10,
      name: 'Category 2',
      children: []
    }
  ];

And here is the method I am using to add data to the array:这是我用来向数组添加数据的方法:

createCategory() {
    this.id++;

    if (this.formGroup.controls['parentCategory'].value == null) {
      this.TREE_DATA.push(
        {
          id: this.id,
          name: this.formGroup.controls['categoryName'].value,
          children: []
        });
    } else {
      this.TREE_DATA.forEach((v, index) => {
        if (v.id === this.formGroup.controls['parentCategory'].value.id) {
          this.TREE_DATA[index].children.push(
            {
              id: this.id,
              name: this.formGroup.controls['categoryName'].value,
              children: []
            }
          );
        }
      });
    }
  }

I know that I can just add an additional foreach however this doesn't seem like the best way to handle this, as I could want to go 5-6 layers down at any time to add a new nested child.我知道我可以添加一个额外的 foreach 但这似乎不是处理这个问题的最佳方法,因为我可能想要随时向下 5-6 层添加一个新的嵌套子项。 What would be the best way to handle this?处理这个问题的最佳方法是什么?

You could take a recursive function for finding an object in the tree.您可以使用递归函数在树中查找对象。

 function find(array, id) { var result; array.some(object => { if (object.id === id) return result = object; return result = find(object.children || [], id); }); return result; } var data = [{ id: 1, name: 'Category 1', children: [{ id: 2, name: 'Category 1-1', children: [{ id: 4, name: 'Category 1-1-a', children: [] }, { id: 5, name: 'Category 1-1-b', children: [] }] }, { id: 6, name: 'Category 1-2', children: [{ id: 7, name: 'Category 1-2-a', children: [{ id: 8, name: 'Category 1-2-1', children: [{ id: 9, name: 'Category 1-2-2-a', children: [] }] }] }] }] }, { id: 10, name: 'Category 2', children: [] }]; console.log(find(data, 9)); console.log(find(data, 'unknown'));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM