我试图循环一个树和它的项目,以便通过它寻找一个节点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>
Run Code Online (Sandbox Code Playgroud)
当我调用load递归函数返回undefined 时,我遇到了问题.有关如何解决这个问题的任何提示?
for (let x of node.items) {
return getNode(x, id);
}
Run Code Online (Sandbox Code Playgroud)
这将查看第一个项目,无论它找到什么,它都会返回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();Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37 次 |
| 最近记录: |