У меня есть один массив разрешений, этот массив в точечном формате, я хочу отформатировать его для редактирования в виде дерева. Я преобразовал массив из нескольких циклов forEach, но из-за большого количества дочерних элементов я вернулся к формату рекурсии, на этот раз я не смог перейти к следующему разделу после поддеревьев. .
Мой форматированный массив:
var permArray = [
0: {id: 1, name: "auth.login"},
1: {id: 2, name: "dashboard.open"},
2: {id: 3, name: "account.view.others"},
3: {id: 4, name: "account.edit.roles"},
4: {id: 5, name: "account.delete.others"},
5: {id: 6, name: "menu.view.list"},
6: {id: 7, name: "developer.main.title"},
7: {id: 8, name: "developer.main.users"},
8: {id: 9, name: "developer.main.menu"},
9: {id: 10, name: "developer.main.roles"},
10: {id: 11, name: "users.have.branches"},
11: {id: 12, name: "add.users.branches"},
12: {id: 13, name: "edit.users.branches"},
13: {id: 14, name: "list.users.branches"},
14: {id: 15, name: "view.roles.manage.page"},
15: {id: 16, name: "view.users.manage.page"},
16: {id: 17, name: "view.menu.manage.page"},
17: {id: 18, name: "view.branch.products.manage.page"},
18: {id: 19, name: "view.branch.reports.manage.page"},
19: {id: 20, name: "sube.owned.list.product"},
20: {id: 21, name: "sube.owned.list.rapor"},
21: {id: 22, name: "branches.menu.title"},
22: {id: 23, name: "view.branches.menu.item"},
23: {id: 24, name: "users.state.edit"},
24: {id: 25, name: "isMultiLogin"},
25: {id: 26, name: "isViewSummaryAccount"},
26: {id: 27, name: "view.others.info"},
27: {id: 28, name: "addNewAccount"}
];
, и это моя последняя рекурсивная функция
function buildTree(perms, nodeIndex = 0, permIndex = 0) {
var out = [],
form = this.getForm(),
tmpKeys = perms[permIndex].name.split(".");
if (permIndex == perms.length - 1) {
return out;
} else {
if (nodeIndex == tmpKeys.length - 1) {
form.id = perms[permIndex].id;
form.text = tmpKeys[nodeIndex];
return form;
} else {
form.id = nodeIndex + "-" + permIndex;
form.text = tmpKeys[nodeIndex];
if (tmpKeys.length - 1 > nodeIndex) {
if (!("children" in form))
form["children"] = [];
form["children"].push( buildTree(perms, ++nodeIndex, permIndex) );
}
return form;
}
}
}
результат этой функции
{id: "0-0", текст: "auth", дети: [{id: 1, текст: "логин"}]}
но что я хочу сделать
[{
id: "0-0",
text: "auth",
children: [{
id: 1,
text: "login"
}]
},
{
id: "0-1",
text: "dashboard",
children: [{
id: 2,
text: "open"
}]
},
{
id: "0-2",
text: "account",
children: [{
id: "1-2",
text: "view"
children: [{
id: 3,
text: "others"
}]
},
id: "1-3",
text: "edit",
children: [{
id: 4,
text: "roles"
}]
]
},...continue]