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

报告相同问题?

悬赏问题

  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来