js中如何从tree数据中找出某一项以及父级和祖先级
warning:
这篇文章距离上次修改已过205天,其中的内容可能已经有所变动。
在JavaScript中,要从树形数据中找出特定项及其所有父级和祖先级,可以使用递归函数遍历整棵树。以下是一个简单的示例函数,它接收树形数据和要查找的项的特定属性值,返回找到的节点以及其所有父级和祖先级。
function findItemInTree(treeData, targetValue, targetKey = 'id') {
const result = {
item: null,
parents: [],
ancestors: []
};
function findNode(nodes, parent) {
if (!nodes || nodes.length === 0) return;
for (const node of nodes) {
if (node[targetKey] === targetValue) {
result.item = node;
result.parents = [parent];
return true;
}
if (findNode(node.children, node)) {
result.parents.push(parent);
return true;
}
}
}
findNode(treeData, null);
if (result.item) {
result.ancestors = result.parents.slice(0, -1);
}
return result;
}
// 示例树形数据
const treeData = [
{
id: 1,
name: 'Node 1',
children: [
{
id: 2,
name: 'Node 1.1',
children: [{ id: 4, name: 'Node 1.1.1' }]
}
]
},
{
id: 3,
name: 'Node 2'
}
];
// 使用示例
const targetValue = 4; // 假设我们要找的项的id是4
const found = findItemInTree(treeData, targetValue);
console.log(found);
这段代码定义了一个findItemInTree
函数,它接受树形数据和目标值,然后递归查找具有该值的节点。如果找到了节点,它会返回一个对象,包含item
(找到的节点)、parents
(所有父节点,不包括目标节点本身)和ancestors
(所有祖先节点,包括目标节点的父节点)。在实际应用中,你可以根据需要调整targetKey
来指定查找特定属性。
评论已关闭