作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 Javascript 构建一个图形编辑器,我需要一种算法来识别两个“节点”对象之间的所有可能路径。
给定以下 JSON 对象:
{
"failureNode": {
"failureNode": {
"failureNode": {
"failureNode": {
"failureNode": null,
"successNode": null,
"id": "node-endpointfailure",}
},
"successNode": {
"failureNode": null,
"successNode": null,
"id": "node-endpointsuccess",
},
"id": "node-1",
},
"successNode": {
"failureNode": null,
"successNode": null,
"id": "node-endpointsuccess",
},
"id": "node-2",
},
"successNode": {
"failureNode": {
"failureNode": {
"failureNode": null,
"successNode": null,
"id": "node-endpointfailure",
},
"successNode": {
"failureNode": null,
"successNode": null,
"id": "node-endpointsuccess",
},
"id": "node-1",
},
"successNode": {
"failureNode": null,
"successNode": null,
"id": "node-endpointsuccess",
},
"id": "node-3",
},
"id": "node-4",
},
"successNode": {
"failureNode": null,
"successNode": null,
"id": "node-endpointsuccess",
},
"id": "node-root",
}
我需要 ID = 'node-root' &'node-endpointfailure' 的节点之间的所有可能路由。在这个例子中,有两种可能的方式从'Start'(在数据结构中是node-root)开始,到'Failure'(node-endpointfailure)结束:
对于此示例,输出将是一个 JSON 路径数组。像这样的……
[
failureNode.failureNode.failureNode.failureNode,
failureNode.successNode.failureNode.failureNode
]
大多数应用程序都使用 jQuery,因此纯 Javascript 或 jQuery 解决方案都可以。
最佳答案
这应该完成任务:
function recurse(from, to, node) {
var result = [],
choices = ["sucessNode", "failureNode"];
if (!from && to == node.id)
return [[]];
if (from == node.id)
return recurse(null, to, node);
for (var i=0; i<choices.length; i++) {
var choice = choices[i];
if (node[choice] != null) {
var res = recurse(from, to, node[choice]);
for (var j=0; j<res.length; j++) {
res[j].unshift(choice);
result.push(res[j]);
}
}
}
return result;
}
recurse('node-root', 'node-endpointfailure', data);
关于javascript - 递归JSON数据结构的遍历算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14610545/
我是一名优秀的程序员,十分优秀!