如果层数确定的话,可以这样做:
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);
效果如图:
当然,代码还可以精简优化,这里只是提供个参考