js嵌套对象已经子集id,怎么查找所属父级的所有id?

clipboard.png
要求效果,点击任意checkbox时,自动选中所属的所有父级,父级和子集是单独的,没有全选关系;代码结构如下

[
        {
            "id": 1,
            "display_name": "仪表盘",
            "children": []
        },
        {
            "id": 2,
            "display_name": "用户权限管理",
            "children": [
                {
                    "id": 3,
                    "display_name": "用户列表",
                    "children": [
                        {
                            "id": 5,
                            "display_name": "创建管理员"
                        },
                        {
                            "id": 6,
                            "display_name": "删除用户"
                        },
                        {
                            "id": 7,
                            "display_name": "用户禁用/取消禁用"
                        },
                        {
                            "id": 8,
                            "display_name": "更新用户所在角色组"
                        }
                    ]
                },
                …………
阅读 4.2k
1 个回答

如果层数确定的话,可以这样做:

<script>
    var ad = [
        {
            "id": 1,
            "display_name": "仪表盘",
            "children": []
        },
        {
            "id": 2,
            "display_name": "用户权限管理",
            "children": [
                {
                    "id": 3,
                    "display_name": "用户列表",
                    "children": [
                        {
                            "id": 5,
                            "display_name": "创建管理员"
                        },
                        {
                            "id": 6,
                            "display_name": "删除用户"
                        },
                        {
                            "id": 7,
                            "display_name": "用户禁用/取消禁用"
                        },
                        {
                            "id": 8,
                            "display_name": "更新用户所在角色组"
                        }
                    ]
                }
            ]
        }];

    var the_id = 5;
    var the_select_id = [];

    for(var i in ad){
        if (ad[i].id !== the_id) {
            for(var j in ad[i].children) {

                if (ad[i].children[j].id !== the_id) {
                    for(var k in ad[i].children[j].children) {

                        if (ad[i].children[j].children[k].id == the_id) {
                            the_select_id.push(ad[i].children[j].children[k].id);
                            the_select_id.push(ad[i].children[j].id);
                            the_select_id.push(ad[i].id);
                        }
                    }
                } else {
                    the_select_id.push(ad[i].children[j].id);
                    the_select_id.push(ad[i].id);
                }
            }
        } else {
            the_select_id.push(ad[i].id);
        }
    }

    console.log(the_select_id);
</script>

效果如图:

clipboard.png

当然,代码还可以精简优化,这里只是提供个参考

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