【问题标题】:Loop over children of nodes recursively递归循环遍历节点的子节点
【发布时间】:2018-02-22 17:13:17
【问题描述】:

我有一个挑战循环遍历具有嵌套子属性的数组对象,结构是这样的

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

[{
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: [],
  }],
}],
}]

【问题讨论】:

标签: javascript arrays json


【解决方案1】:

从 ES6 开始,您可以使用带有嵌套 yield 的生成器来展平迭代:

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

所以你可以这样做:

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

【讨论】:

  • 哇!这一定是我生命中最美好的日子之一,我永远不会忘记这一天:D,@Jonas,非常感谢,它有效
  • @teebo 欢迎您,很高兴为您提供帮助 :) 另请阅读 this in depth wiki on MDN
  • 太优雅了!
猜你喜欢
  • 2012-03-21
  • 1970-01-01
  • 2013-02-16
  • 2011-09-11
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
相关资源
最近更新 更多