Does anyone have an idea how to write a recursive method to find item by id within a treeview node list like this:
This data is direct binded to treeview like this
So I need to find item by id, and update with new values
Assuming your node structure being:
interface Item {
id: string;
[K: string]: any;
}
interface Node {
children: Node[];
connectionTypeId: number;
item: Item;
}
This is a DFS (Depth First Search) on your structure (returns undefined
if nothing is found):
function findNodeById(list: Node[], id: string): Node | undefined {
for (const n of list) {
const res = n.item.id === id ? n : findNodeById(n.children, id);
if (res) return res;
}
}
This is a BFS (Breadth First Search):
function findNodeById(list: Node[], id: string): Node | undefined {
for (const n of list) {
if (n.item.id === id) return n;
}
for (const n of list) {
const res = findNodeById(n.children, id);
if (res) return res;
}
}
An update can be performed directly on the retrieved node
const node: Node = findNodeById(list, 'f2ef4ced74448d0da8d109caf75a1073');
if (node) {
node.item.name = 'A new name';
console.log('Updated');
} else {
console.warn('Id not found');
}