代码之家  ›  专栏  ›  技术社区  ›  Thabo

递归遍历节点的子级

  •  4
  • Thabo  · 技术社区  · 8 年前

    我有一个挑战,在一个具有嵌套子属性的数组对象上循环,结构如下

    我尝试的遍历甚至都不接近,我实际上希望结果是一个平坦的数组

    [{
    element: 'a',
    key: 'a',
    isCollapsible: true,
    isClickable: false,
    children: [{
      element: 'a-1',
      key: 'a-1',
      indentChildren: false,
      children: [{
        element: 'a-1-1',
        key: 'a-1-1',
        children: [],
      }, {
        element: 'a-1-2',
        key: 'a-1-2',
        children: [],
      }],
    }, {
      element: 'a-2',
      key: 'a-2',
      indentChildren: false,
      children: [{
        element: 'a-2-1',
        key: 'a-2-1',
        indentChildren: false,
        children: [{
          element: 'a-2-1-1',
          key: 'a-2-1-1',
          children: [],
        }],
      }, {
        element: 'a-2-2',
        key: 'a-2-2',
        children: [],
      }, {
        element: 'a-2-3',
        key: 'a-2-3',
        children: [],
      }],
    }],
    }]
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   Jonas Wilms    8 年前

    由于ES6,您可以使用具有嵌套产量的生成器来展平迭代:

     function* flatten(array){
       for(const el of array){
         yield el;
         yield* flatten(el.children);
       }
    }
    

    因此,您可以:

     for(const el of flatten(yourdata)){
        //...
     }