如何使用递归解构赋值?

新手上路,请多包涵

如何将此数据通过递归算法结构赋值

tableData: [

    {
      name: '你好镇',
      children: [
        {
          year: '2020',
          children: [
            {
              desc1: '1'
            },
            {
              desc1: '11'
            }
          ]
        },
        {
          year: '2021',
          children: [
            {
              desc: '2'
            },
            {
              desc: '22'
            }
          ]
        },
        {
          year: '2022',
          children: [
            {
              desc: '3'
            },
            {
              desc: '33'
            }
          ]
        }
      ]
    }
  ],


我我所希望的数据结构式是这样
[
{name:'你好镇',year:'2020',desc:'1'},
{name:'你好镇',year:'2020',desc:'11'},
{name:'你好镇',year:'2021'.desc:'2'},
{name:'你好镇',year:'2021',desc:'22'},
{name:'你好镇',year:'2022',desc:'3'},
{name:'你好镇',year:'2022',desc:'33'}
]

多次循环是可以做出来 但是有需求超过3-4次以上的循环 就特别麻烦。求解?非常感谢

阅读 1.4k
1 个回答
function flatArray(list) {
  return list.reduce((res,v) => {
    if(v.children) res = res.concat(flatArray(v.children).map(o => ({
      ...v,
      ...o,
      children: null,
    }))); else res.push(v)
    return res;
  }, [])
}

偷懒将children置为null,如果一定要去除这个属性也可以写个方法去掉这个key;
js已经有flat相关的方法了,于是第二种写法就可以如下:

function flatArray(list) {
  return list.flatMap(v => v.children ? flatArray(v.children).map(o => ({...v,...o, children: null})) : v)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题