js 对象数组递归

多级嵌套的对象数组,有一个id,根据这个id去查找,和这个id有关系的id,我的写法如下,不知道哪里有问题?

clipboard.png

如下,id为113,希望获取到的为1,11,113这样的数组(不要通过str.splice等方式实现)
var arr = [

    {
        "menuId": 1,
        "menuName": "物联网",
        "defaultIcon": "icon-wulianwangjiankong",

        "path": "/internet_things",
        "childs": [
            {
                "menuId": 11,
                "menuName": "首页",
                "defaultIcon": "icon-home",
                "path": "/internet_things/home",
                "childs": [
                    {
                        "menuId": 111,
                        "menuName": "数据分析",
                        "defaultIcon": "",
                        "path": "/internet_things/home/data_analyse",
                        "childs": []
                    },
                    {
                        "menuId": 112,
                        "menuName": "设备分布",
                        "defaultIcon": "",
                        "path": "/internet_things/home/device_loc",
                        "childs": []
                    }
              ]
             }
            ]
           }
          ];
阅读 6.5k
3 个回答

id相等时 将父id也push进数组

function testArr(arr, id){
    var resulte = []
    var loop = function(arr){
        return arr.some(item=>{
            if(item.menuId == id){
                resulte.unshift(item.menuId)
                return true
            }
            if(Array.isArray(item.childs)){
                var childHasId = loop(item.childs)
                childHasId && resulte.unshift(item.menuId)
                return childHasId
            }
        })
    }
    loop(arr)
    return resulte
}
testArr(arr,'112'); //[1, 11, 112]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题