I have a json that forms a tree.
[{
id: 1,
name: "A",
isSelected: false,
child: [
{
id: 2,
name: "B",
isSelected: false,
}
{
id: 3,
name: "C",
isSelected: false,
}
]
},
{
id: 4,
name: "D",
isSelected: false,
child: [
{
id: 5,
name: "E",
isSelected: false,
}
{
id: 6,
name: "F",
isSelected: false,
}
]
}]
Now I have an array of selected nodes
[{id: 2},{id:3}]
And markSelectedNodes method to mark the nodes as selected based on selected node array
markSelectedNodes(_nodes) {
_nodes.forEach((_node) => {
// match if node exists in selected nodes
const _isFound = this.selectedNodes.find((_selectedNode) => _selectedNode.id === _node.id);
if (_isFound) {
_node.isSelected = true;
} else {
_node.isSelected = false;
}
// removed the node from selecedNode list as this has been marked selected
this.selectedNodes = this.selectedNodes.filter((_selectedNode) => _selectedNode !== _node.id);
// go through the child
if (_node.child && _node.child.length) {
this.markSelectedNodes(_node.child);
}
});
}
Now if all the child has been marked selected it should also mark the parent node as selected.
Can this be implemented through stack?