gpt4 book ai didi

javascript - 递归JSON数据结构的遍历算法

转载 作者:行者123 更新时间:2023-11-30 18:10:44 25 4
gpt4 key购买 nike

我正在用 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)结束:

  1. 开始 -> node1 -> node2 -> node4 -> 失败
  2. 开始 -> node1 -> node3 -> node4 -> 失败

对于此示例,输出将是一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com