gpt4 book ai didi

javascript - 如何比较嵌套数组中的父记录和子记录?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:41:30 25 4
gpt4 key购买 nike

我在层次结构中有一个如下所示的节点:

Node - 1
Node-1-1
Node-1-1-1

现在我想检查父节点和子节点之间是否定义了连接。

父子之间的连接定义如下,例如 Node-1 和 Node-1-1 之间:

"connections": {
"joins": [
{
"parent": "Node-1",
"child": "Node-1-1"
}
]
}

如果在父节点和子节点之间存在至少 1 个连接(连接的连接属性中的 1 条记录)那么没关系,否则我想向用户显示警报并希望从迭代中返回遇到节点之间没有连接时立即运行。

因此,除非我从迭代函数中得到响应(即迭代函数未完成),否则我不想增加我的 ID,这就是我将回调传递给迭代函数并希望返回响应的原因。

由于 Node-1-1 和 Node-1-1-1 之间没有连接,所以我想向用户显示警报,因为连接的连接属性中没有记录。

但问题是我不知道如何比较每个父节点和子节点以及如何在递归结构中管理此回调。

var records = [
{
"name": "Node-1",
"nodes": [
{
"name": "Node-1-1",
"isParent": false,
"nodes": [
{
"name": "Node-1-1-1",
"isParent": false,
"nodes": [

],
"connections": {
"joins": []
}
}
],
"connections": {
"joins": [
{
"parent": "Node-1",
"child": "Node-1-1"
}
]
}
}
],
"isParent": true
}
];


function CheckConnections(){
var id=0;
iterate(records,
function (valid) {
if(valid)
{
id = id + 1;
console.log(id);
}
else
alert("please define connections")
}
);

}

function iterate(nodes,callback)
{
var connectionDefine = false;

callback(false);
}
<input type="button"  value="Check Connections"  onclick="CheckConnections()">

最佳答案

以下递归解决方案将向您展示遇到的第一个缺失连接关系的错误。我添加了评论,以便您可以跟踪发生了什么。

它不会检查所有连接:当它发现在子节点和父节点之间正确建立的连接时,它会快速中断以移动到下一个节点。

基本上它包括搜索每个子节点,是否正确记录了当前父/子关系的连接。它应该适用于任意数量的子节点/嵌套级别。

var records = [{"name":"Node-1","nodes":[{"name":"Node-1-1","isParent":false,"nodes":[{"name":"Node-1-1-1","isParent":false,"nodes":[],"connections":{"joins":[]}}], "connections":{"joins":[{"parent":"Node-1","child":"Node-1-1"}]}}],"isParent":true}];

function connections_control(records, parent = undefined) {
// Browse the nodes list
for (var node of records) {
// Control if the keys we need do exist
if (parent && node.connections && node.connections.joins) {
var found = false;
// Search in connections the current relation parent/child
for (var connection of node.connections.joins) {
if (connection.parent == parent && connection.child == node.name) {
found = true;
break;
}
}
if (!found) {
// We checked all connections, but we did not find our current relation!
console.log('Warning: Broken connection between parent node '+parent+' and child node '+node.name);
break;
}
}
if (node.nodes) {
// The current node becomes parent, start again with the inner nodes list
connections_control(node.nodes, node.name);
}
}
}

connections_control(records);

请注意,在第一个循环中,将您的文档置于其根目录中,没有父级,因此不会搜索连接。

执行:

nodejs childs.js
Warning: Broken connection between parent node Node-1-1 and child node Node-1-1-1

关于javascript - 如何比较嵌套数组中的父记录和子记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45037809/

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