Javascript 递归地在节点的子节点上循环

Javascript 递归地在节点的子节点上循环,javascript,arrays,json,Javascript,Arrays,Json,我有一个挑战,就是在具有嵌套子属性的数组对象上循环,结构如下 我尝试过的遍历甚至不接近,我实际上希望结果是一个平面数组 [{ 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

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

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

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

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

 function* flatten(array){
   for(const el of array){
     yield el;
     yield* flatten(el.children);
   }
}
因此,您可以:

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

请回顾一下,特别是做你的研究,了解有关SO的相关主题,并尝试一下。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。祝你好运只有您可能想将{}更改为数组,只向该数组添加元素而不添加键。哇!这一定是我一生中最美好的日子之一,我永远不会忘记这一天:D,@Jonas,非常感谢,它works@teebo不客气,很高兴能帮上忙:)请同时阅读这本书,它是如此优雅!