Ниже представлена древовидная структура
data= [
{
"name": "Company",
"url": "",
"submenu": [
{
"name": "Company Wiki",
"url": "",
"submenu": [
{
"name": "Company Wiki2",
"url": "",
"submenu": [{
"name": "Company Wiki3",
"url": "http://my.company.co/wiki",
"submenu":null
}]
}
]
},
{
"name": "Company Jira",
"url": "https://facebook.com",
"submenu": null
},
{
"name": "Google",
"url": "http://www.google.com",
"submenu": null
},
{
"name": "Yahoo",
"url": "http://www.yahoo.com",
"submenu": null
}, {
"name": "Company ",
"url": "http://www.Company.io",
"submenu": null
}, {
"name": "Test Submenu6",
"url": "http://www.Company.io",
"submenu": null
}, {
"name": "Test Submenu7",
"url": "http://www.Company.io",
"submenu": null
}, {
"name": "Test Submenu8",
"url": "http://www.Company.io",
"submenu": null
}
]
},
{
"name": "Department",
"submenu": [{
"name": "Department Wiki",
"url": "http://my.company.co/wiki",
"submenu": null
}, {
"name": "Test Wiki",
"url": "http://my.company.co/wiki",
"submenu": null
}]
}, {
"name": "Documents",
"url": "http://my.company.co/wiki",
"submenu": null
}
];
У меня есть набор значений
["Company", "Company Wiki", "Company Wiki2", "Company Wiki3"]
Мне нужно изменить приведенную выше древовидную структуру таким образом, чтобы узлы с указанными выше именами содержали свойство с именем visible true.
function transverse (root, newArr, visibleSet) {
debugger;
if(visibleSet.has(root.name)) {
root = {...root, visible:true}
}else {
root = {...root, visible:false}
}
newArr.push(root);
if (root.sub === null || root.sub.length === 0) {
return root;
}
if (root.hasOwnProperty("sub") && root.sub instanceof Array)
root.sub.map(child => {
transverse(child, newArr, visibleSet);
});
}
var str = "";
data.forEach(item => {
newData.push(transverse(item,[], visibleSet));
});
Приведенный выше код добавляет свойство visible:true
на основе имени, но структура дерева не сохраняется при добавлении узла обратно в массив. Как сохранить структуру дерева в рекурсивном цикле при добавлении к нему нового свойства? Или создать дубликат дерева с той же структурой.