我正在尝试遍历树及其项目以便通过其style={{visibility: "hidden", ...
查找节点,这是代码:
id
当我调用<!DOCTYPE html>
<meta charset="utf-8">
<html>
<head>
<title>Hi there</title>
<script>
function getNode(node, id) {
if (node.id === id) {
return node;
}
if (node.items) {
for (let x of node.items) {
return getNode(x, id);
}
}
}
function load() {
var nodes = [{
id: 0,
label: 'root',
items: [{
id: 1,
label: 'one'
}, {
id: 2,
label: 'two'
}, {
id: 3,
label: 'three'
}, {
id: 4,
label: 'four'
}]
}];
var n = nodes[0];
var node = getNode(n, 3);
console.log(node);
}
window.onload = load();
</script>
</head>
<body>
</body>
</html>
递归函数返回undefined时,我遇到了问题。有关如何解决这个问题的任何提示?
答案 0 :(得分:5)
for (let x of node.items) {
return getNode(x, id);
}
这将查看第一个项目,无论它找到什么,它都会返回getNode的结果。所以它向下走到id = 1的项目,然后返回undefined,并继续返回未定义的堆栈。它永远不会移动到其他项目(即循环不做任何事情)。
相反,它应该只在找到它时返回,或者转到下一个项目。
function getNode(node, id) {
if (node.id === id) {
return node;
}
if (node.items) {
for (let x of node.items) {
var result = getNode(x, id);
if (result) {
return result; //<<---- only returning if we found it
}
}
}
}
function load() {
var nodes = [{
id: 0,
label: 'root',
items: [{
id: 1,
label: 'one'
}, {
id: 2,
label: 'two'
}, {
id: 3,
label: 'three'
}, {
id: 4,
label: 'four'
}]
}];
var n = nodes[0];
var node = getNode(n, 3);
console.log(node);
}
load();
答案 1 :(得分:-2)
你不能对此进行递归,因为没有&#34;项目&#34; items [0]的属性,因此递归停止
{
id: 1,
label: "one"
}
并返回undefined。