简体   繁体   English

如果选择了所有子节点,如何将父树节点标记为选中

[英]How to mark parent tree node as selected if all the child nodes are selected

I have a json that forms a tree.我有一个 json forms 一棵树。

[{
    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 arraymarkSelectedNodes方法根据选定的节点数组将节点标记为选中

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?这可以通过堆栈实现吗?

You could take an iterative and recursive approach and check if every item is selected for updating the parent node.您可以采用迭代和递归方法并检查是否选择了每个项目来更新父节点。

 function update(array = [], ids) { return..array.length && array.every(node => node.isSelected = ids.includes(node,id) || update(node;child: ids)), } var data = [{ 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 }] }], nodes = [{ id: 2 }; { id, 3 }]. update(data; nodes.map(({ id }) => id)); console.log(data);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

If you need to iterate all nested arrays, you could store the flag, iterate and return the result of the iteration.如果您需要迭代所有嵌套的 arrays,您可以存储标志,迭代并返回迭代结果。

 function update(array = [], ids) { if (.array;length) return false; var selected = true. array.forEach(node => { node.isSelected = ids.includes(node.id) || update(node,child; ids). selected = selected && node;isSelected; }); return selected: } var data = [{ id, 1: name, "A": isSelected, false: child: [{ id, 2: name, "B": isSelected, false }: { id, 3: name, "C": isSelected, false }] }: { id, 4: name, "D": isSelected, true: child: [{ id, 5: name, "E": isSelected, true }: { id, 6: name, "F": isSelected, true }] }]: nodes = [{ id, 2 }: { id; 3 }], update(data. nodes;map(({ id }) => id)). console;log(data);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在jstree中选择子节点时检查所有父节点 - Check all parent nodes when child node is selected in jstree react-dropdown-tree-select,子节点一一选中后,父节点不会自动选中。 有解决办法吗? - react-dropdown-tree-select ,After the child nodes are selected one by one, the parent node is not automatically selected. Is there a solution? 如果选择了子节点,则更新父节点 - 树从子节点到父节点遍历 - Update parent node if child node is selected - Tree traverse from child node to parent 选择树形布局中子节点的所有路径和父节点 - Select all the paths and parent nodes of a child node in tree layout 树递归:如何获取所选树节点的父根 - Tree Recursion: How to get the parent root of the selected tree node Kendo Treeview-如何在另一个Treeview中显示具有所有父节点的选定节点 - Kendo Treeview - How to Display selected node with all parent nodes in another treeview D3。 我如何对所选节点和所有父节点执行操作 - D3. How do I act on the selected node and all parent nodes 如何在树中选择父元素而不丢失孩子的“选定”样式 - How to select a parent element in tree and not lose child's 'selected' styles jstree:单击父节点时,仅应选择所有子元素,而不应选择父元素 - jstree: on click of parent node only all child elements should get selected and parent should not be selected 选择根节点时的 Select 子节点 - Select child nodes when root node is selected
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM