javascript - 删除递归数据结构中给定节点上方的所有内容
问题描述
我有一个表格的数据结构
node: { "name": "root";
"children": [ node ]; }
问题底部还有另一个例子。
现在我想删除指定节点之上的所有节点,只保留剩余的子树。
例如,给定树 T
A
/ \
B C
/ \
D E
该函数getTree(T, 'C')
应该返回
C
/ \
D E
问题:有没有简单的方法来实现这个?
function getTree(json, node) {
var tree = JSON.parse(json);
/* QUESTION: how do I remove everything not below the node with name===node here?
}
PS:更大的例子:
var tree = [
{
text: "Parent 1",
nodes: [
{
text: "Child 1",
nodes: [
{
text: "Grandchild 1"
},
{
text: "Grandchild 2"
}
]
},
{
text: "Child 2"
}
]
},
{
text: "Parent 2"
},
{
text: "Parent 3"
},
{
text: "Parent 4"
},
{
text: "Parent 5"
}
];
编辑:好点:我应该提到节点名称是唯一的。
解决方案
您可以迭代数组并查看节点是否具有所需的文本,或者嵌套节点是否有找到。
const
getTree = (tree, text) => {
let result;
tree.some(node => result = node.text === text
? node
: getTree(node.nodes || [], text)
);
return result;
},
tree = [{ text: "Parent 1", nodes: [{ text: "Child 1", nodes: [{ text: "Grandchild 1" }, { text: "Grandchild 2" }] }, { text: "Child 2" }] }, { text: "Parent 2" }, { text: "Parent 3" }, { text: "Parent 4" }, { text: "Parent 5" }];
console.log(getTree(tree, "Grandchild 1"));
console.log(getTree(tree, "Parent 1"));
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- c# - 如何构建一个处理带有等号“=”号的查询参数的 ASP.Net 核心 Web api Enpoint
- python - 如何构建 Django 项目并将视图实现到 index.html
- c# - XSLT 转换路径中的非法字符
- graphql - 允许订阅返回实体的初始数据
- c++ - 用于模板专业化的虚拟功能或 SFINAE……还是更好的方法?
- azure-devops - 在流程模板中使用 Reviewed By 字段的安全性
- excel - 如何根据其旁边的单元格中的值更改来修改单元格值
- java - 如何在java常量中传递jenkins参数值
- java - 如果消费者线程面临异常,如何停止生产者线程
- python - Python (Pytorch) - 循环和日志记录