一个有多级的json对象,删除对象是空的键值,觉得可以用递归,怎么实现

let arrn=[
        {
            "MENU_URL": "serviceManage",
            "MENU_ID": "8619ca0b6fbc42649a27475e339d5d4a",
            "MENU_INFO": [
                {
                    "MENU_URL": "userInfo",
                    "MENU_ID": "104a580029c54e139210b7e87dca6d89",
                    "MENU_INFO": [],
                    "MENU_NAME": "用户信息"
                }
            ],
            "MENU_NAME": "业务管理"
        },
        {
            "MENU_URL": "serviceManage/recordQuery",
            "MENU_ID": "d379e3f38cb3472ab18287034f32ef46",
            "MENU_INFO": [
                {
                    "MENU_URL": "dashboard",
                    "MENU_ID": "104a580029c54e139210b7e87dca6d89",
                    "MENU_INFO": [
                        {
                            "MENU_URL": "dashboard",
                            "MENU_ID": "104a580029c54e139210b7e87dca6d89",
                            "MENU_INFO": [],
                            "MENU_NAME": "监控面板222"
                        }
                    ],
                    "MENU_NAME": "监控面板111"
                },
                {
                    "MENU_URL": "dashboard",
                    "MENU_ID": "104a580029c54e139210b7e87dca6d89",
                    "MENU_INFO": [],
                    "MENU_NAME": "监控面板333"
                }
            ],
            "MENU_NAME": "订购信息查询"
        }
    ]
    let tmparr=arrn.map(function (value) {
        if (value.MENU_INFO.length===0){
            delete value.MENU_INFO
        }else{
            value.MENU_INFO.map(function (val) {
                if (val.MENU_INFO.length===0){
                    delete val.MENU_INFO
                }
            })
        }
        return value
    })
    console.log(tmparr)
就是MENU_ID为空的时候,把这个key给删除了,一级一级向下。现在可以实现到第三级,总不能一直判断下去吧,有多少级也不一定呢,有没有高手指点指点
阅读 2.6k
1 个回答

把处理函数独立出来

function exec(array) {
  array.forEach(item => {
    if (item.MENU_INFO.length === 0) {
      delete item.MENU_INFO
    } else {
      exec(item.MENU_INFO)
    }
  })
}

exec(arrn);

console.log(arrn)

怕改动源数据可提前cloneDeep一下 用map delete也会把源数据改了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题