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

树形数据转化为一维数组

现在有一组数据

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条)

报告相同问题?

悬赏问题

  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题