用forEach和filter处理三维数组

描述:树形图结构的三维数值,过滤掉子项的一些数据(通过勾选),返回新的三位数组。
难点:数组的每项结构不一样,有的含有children,有的不含children,具体看下方数据结构。
解决方案:两层foreach 循环,最里面一层用filter,貌似filter无论几层循环,只能用在最后一层。

this.dataList = [
    {
        "label": "申请单",
        "children": [
            {
                "label": "状态 : 报告"
            },
            {
                "label": "编号 : A0003"
            },
            {
                "label": "优先级 : 正常"
            }
        ]
    },
    {
        "label": "检测项目",
        "children": [
            {
                "label": "开始循环 : 检测项目"
            },
            {
                "label": "结束循环 : 检测项目"
            },
            {
                "label": 1,
                "children": [
                    {
                        "label": "1 : 2"
                    },
                    {
                        "label": "名称 : 测试"
                    },
                    {
                        "label": "章节号 : 001"
                    },
                    {
                        "label": "标准名 : 暂无"
                    },
                    {
                        "label": "检测值 : 小于3"
                    },
                    {
                        "label": "检测结论 : 1"
                    },
                    {
                        "label": "原始记录表 : {\"url\":\"/file/downloads/ent/dev/admin/202208/e2308666-12fe-11ed-b924-00163e0e4e24.json\",\"pdf_url\":null}"
                    }
                ]
            },
            {
                "label": 2,
                "children": [
                    {
                        "label": "名称 : 测试2"
                    },
                    {
                        "label": "章节号 : 002"
                    },
                    {
                        "label": "标准名 : 暂无"
                    },
                    {
                        "label": "检测值 : 大雨2"
                    },
                    {
                        "label": "检测结论 : 2"
                    }
                ]
            }
        ]
    },
    {
        "label": "申请单记录",
        "children": [
            {
                "label": "检测日期 : 2022-08-09 00:00:00"
            },
            {
                "label": "温度 : 18"
            },
            {
                "label": "湿度 : 23"
            },
            {
                "label": "大气压 : 5"
            },
            {
                "label": "检测设备 : 华为"
            },
            {
                "label": "重量4 : 1额"
            },
            {
                "label": "样品测试1 : 21"
            },
            {
                "label": "原始记录表 : 21"
            },
            {
                "label": "报告日期 : 21"
            },
            {
                "label": "记录1 : w而且"
            },
            {
                "label": "申请单记录 : e1"
            },
            {
                "label": "结论 : 21"
            }
        ]
    },
    {
        "label": "样品",
        "children": [
            {
                "label": "开始循环 : 样品"
            },
            {
                "label": "结束循环 : 样品"
            },
            {
                "label": 1,
                "children": [
                    {
                        "label": "编号 : A001"
                    },
                    {
                        "label": "名称 : jack"
                    },
                    {
                        "label": "重量 : 36"
                    },
                    {
                        "label": "型号 : s"
                    },
                    {
                        "label": "描述 : 无"
                    },
                    {
                        "label": "收样时间 : 2022-08-23 00:00:00"
                    },
                    {
                        "label": "收样人 : 9"
                    },
                    {
                        "label": "状态 : un_received"
                    },
                    {
                        "label": "原始记录表 : 21"
                    },
                    {
                        "label": "图片",
                        "children": [
                            {
                                "label": 1,
                                "children": [
                                    {
                                        "label": "filename : OIP-C (5).jpg"
                                    },
                                    {
                                        "label": "url : /file/downloads/ent/dev/admin/202208/19551520-131e-11ed-af0f-00163e0e4e24.jpg"
                                    },
                                    {
                                        "label": "userId : 1"
                                    },
                                    {
                                        "label": "userName : 管理员"
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "label": "报告",
        "children": [
            {
                "label": "状态 : 编制"
            },
            {
                "label": "编号 : AA0237"
            },
            {
                "label": "样品",
                "children": [
                    {
                        "label": 1,
                        "children": [
                            {
                                "label": "A001"
                            }
                        ]
                    }
                ]
            },
            {
                "label": "h5版报告配置 : /file/downloads/www/dev/admin/202208/2e24d146-1884-11ed-9e0c-00163e0e4e24.json"
            }
        ]
    },
    {
        "label": "报告二维码:widthxheight : "
    },
    {
        "label": "当前日期 : 2022-08-11"
    }
]

 点击保存配置,触发事件。

  const AllcheckedNodes = this.$refs.tree.getCheckedKeys(true, false);

       console.log(AllcheckedNodes);     // 获取所有勾选项

      let newArry = []  

     this.dataList1.forEach((item,index) =>{

           newArry[index] = item

                if(item.label == '检测项目' || item.label == '样品' ){

                   newArry[index].label = item.label

                  item.children.forEach((itm,idx) =>{

                    newArry[index].children[idx] = itm

                     if(itm.children){

                     newArry[index].children[idx].children =  itm.children.filter(i =>{

                        if(AllcheckedNodes.includes(i.label)){

                          console.log(i)

                            return i

                        }                      

                       })                            

                     }      

                   })

                 }

                 if(item.label == '申请单'){

                    newArry[index].label = '申请单'

               newArry[index].children =  item.children.filter(i =>{

                   if(AllcheckedNodes.includes(i.label)){

                            return i

                        }  

                 })

                 }

                  if(item.label == '报告'){

                    newArry[index].label = '报告'

               newArry[index].children =  item.children.filter(i =>{

                   if(AllcheckedNodes.includes(i.label)){

                          console.log(i)

                            return i

                        }  

                 })

                 }

                 if(item.label == '申请单记录'){

                    newArry[index].label = '申请单记录'

               newArry[index].children =  item.children.filter(i =>{

                   if(AllcheckedNodes.includes(i.label)){

                          console.log(i)

                            return i

                        }  

                 })

                 }

               })

               console.log(newArry) 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用foreach遍历三维数组的代码如下所示: int\[\]\[\]\[\] hh = {{{1,2},{3,4}},{{5,6}}}; for(int\[\]\[\] el : hh) { for(int\[\] el2 : el) { for(int el3 : el2) { System.out.println(el3); } } } 这段代码使用了三个嵌套的foreach循环来遍历三维数组hh。首先,第一个foreach循环遍历hh的第一维,将每个元素赋给el。然后,第二个foreach循环遍历el的第二维,将每个元素赋给el2。最后,第三个foreach循环遍历el2的第三维,将每个元素赋给el3。在循环体内,我们可以对el3进行相应的操作,这里是将el3打印出来。这样就可以遍历整个三维数组并对其中的元素进行处理了。 #### 引用[.reference_title] - *1* *2* [java中怎么用for-each遍历三维数组](https://blog.csdn.net/qq_38006520/article/details/81036202)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [使用foreach遍历三维数组](https://blog.csdn.net/living_ren/article/details/74936206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值