const dataSource = [
{
id: 1,
label: 'Level one 1',
children: [
{
id: 4,
label: 'Level two 1-1',
children: [
{
id: 9,
label: 'Level three 1-1-1'
},
{
id: 10,
label: 'Level three 1-1-2'
}
]
}
]
},
{
id: 2,
label: 'Level one 2',
children: [
{
id: 5,
label: 'Level two 2-1'
},
{
id: 6,
label: 'Level two 2-2'
}
]
},
{
id: 3,
label: 'Level one 3',
children: [
{
id: 7,
label: 'Level two 3-1'
},
{
id: 8,
label: 'Level two 3-2'
}
]
}
]
function getParentNodeId(tree, childId) {
// 遍历树节点
for (let node of tree) {
// 如果当前节点就是目标节点的父节点,直接返回当前节点id
if (node.children && node.children.some(child => child.id === childId)) {
return node.id;
}
// 否则继续遍历当前节点的子节点
if (node.children) {
const parentId = getParentNodeId(node.children, childId);
if (parentId !== null) {
return parentId;
}
}
}
// 如果没有找到父节点,则返回null
return null;
}
// 示例使用
console.log(getParentNodeId(dataSource, 9)); // 输出 4
console.log(getParentNodeId(dataSource, 6)); // 输出 2
console.log(getParentNodeId(dataSource, 3)); // 输出 null
在上面的代码中,tree参数是一个包含树所有节点的数组,每个节点包含id和children属性,id是节点的唯一标识,children是一个包含子节点的数组,每个子节点包含id和label属性。childId参数是需要查找其父节点id的目标节点id。
首先遍历整个树,如果当前节点的children属性包含目标节点的id,说明当前节点就是目标节点的父节点,直接返回当前节点的id。否则,继续遍历当前节点的子节点,如果找到目标节点的父节点,则返回其id,否则继续遍历下一个节点。如果最终没有找到父节点,则返回null。在这个例子中,使用了数组的some方法来查找节点的子节点中是否包含指定的子节点id。
该代码实现了一个JavaScript函数,遍历树形结构数据,通过节点id查找其父节点的id。函数使用递归方式,从根节点开始检查每个节点的子节点,如果找到匹配的子节点id,则返回父节点的id。示例展示了如何在给定的数据源中查找特定节点的父节点id。
2522

被折叠的 条评论
为什么被折叠?



