Я создаю компонент дерева Angular с помощью cdk-tree и хочу запросить один выбранный узел, однако, поскольку массив вложен, я не могу легко сделать это с помощью .filter.
Структура одного объекта у меня следующая:
export class MyTreeNode {
name: string;
id: string;
selected?: boolean;
children?: MyTreeNode[];
}
У меня есть массив из них для построения дерева, если я запрашиваю, используя что-то вроде .filter, возвращается только верхний уровень, однако я хочу также иметь возможность запрашивать дочерние узлы.
Я думаю, что если я выравниваю массив, я могу использовать .filter для запроса всех данных, однако это самый разумный способ?
Ваше здоровье!
Предоставьте примерные данные для ввода, ожидаемый результат и четкие критерии того, как вы хотите фильтровать для создания минимальный воспроизводимый пример.
Учитывая, что вы работаете с древовидной структурой, я бы использовал функцию, которая работает с деревьями, рекурсивно или итеративно, например
function searchNodeById(tree: MyTreeNode, id: string): MyTreeNode {
const stack: MyTreeNode[] = [];
let node: MyTreeNode;
stack.push(tree);
while (stack.length > 0) {
node = stack.pop();
if (node.id === id) return node;
if (node.children) stack.push(...node.children);
}
}
Это сработало отлично для меня, большое спасибо! Аккуратное маленькое решение
у вас есть пример
linq
?