sha虫剂 2021-05-25 16:14 采纳率: 40%
浏览 138
已采纳

树形数据转化为一维数组

现在有一组数据

const data =[
    {
      checked:'a',
      children:[
            {
              checked:'b1',
              children:[
                        {
                          checked:'c1',
                          storing:true,
                          children:[],
                            },
                        {
                          checked:'c2',
                          storing:true,
                          children:[],
                        },
                        {
                          checked:'c3',
                          storing:false,
                          children:[],
                        },
              ]
            },
            {
              checked:'b2',
              children:[
                        {
                          checked:'c1',
                          storing:true,
                          children:[],
                            },
                        {
                          checked:'c2',
                          storing:true,
                          children:[],
                        },
                        {
                          checked:'c3',
                          storing:false,
                          children:[],
                        },
                        ]
            },
            {
              checked:'b3',
              children:[{
                          checked:'c1',
                          storing:true,
                          children:[],
                            },
                        {
                          checked:'c2',
                          storing:true,
                          children:[],
                        },
                        {
                          checked:'c3',
                          storing:false,
                          children:[],
                        },]
            },
            {
              checked:'b4',
              children:[{
                          checked:'c1',
                          storing:true,
                          children:[],
                            },
                        {
                          checked:'c2',
                          storing:true,
                          children:[],
                        },
                        {
                          checked:'c3',
                          storing:false,
                          children:[],
                        },]
            }, 
        ]
    }
]

要转化为一个一维数组类似

const arr = [{keyA:a1,keyB:b1,keyC:c1,key4:true},{keyA:a1,keyB:b1,keyC:c2,key4:true}

]

就是把所有可能都弄出来,这个示例应该是12种结果

 

目前我自己想的方法是

this.treeDataToCompressed(this.checkedList);
//this.checkedList 为处理前数组
treeDataToCompressed(source) {
      source.forEach((cross) => {
        this.finalResult.push(cross.checked);
        if (cross.children && cross.children.length > 0) {
          this.treeDataToCompressed(cross.children);
        }
      });
    },


这样做第二次遍历的时候会直接跳过第一层 直接从第二次开始,有违初衷
  • 写回答

5条回答 默认 最新

  • 易书生 2021-05-26 10:15
    关注

    用这个代码试试呢?

    let arr = []
    let level = 0
    
    data.forEach(d => {
        let obj = {
            ['key' + level]: d.checked }
        checkChild(d, obj, level + 1)
    })
    
    function checkChild(d, obj, level) {
        if (d.children && d.children.length > 0) {
            d.children.forEach(s => {
                obj = { ...obj, ['key' + level]: s.checked }
                checkChild(s, obj, level + 1)
            })
        } else {
            arr.push(obj)
        }
    }
    
    console.log(arr.length, arr)

    亲测有效,望采纳~~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集