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

2024-04-22

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

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

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

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

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

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

因此,除非并且直到我得到迭代函数的响应(即迭代函数未完成),我不想增加我的 id,这就是为什么我将回调传递给迭代函数并希望返回响应。

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

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

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何比较嵌套数组中的父记录和子记录? 的相关文章

  • 如何确定并打印 jQuery 版本?

    是否有一个 jQuery 函数可以返回当前加载的 jQuery 版本 你可以使用这个 fn jquery or if you re using noConflict jQuery fn jquery 当 jQuery 构建时它会自动更新 定
  • JW Player javaScript API 不工作

    我使用 jwplayer version 5 10 2295 和浏览器 chrome 25 My code jwplayer container setup file path width 300px height 100px autost
  • 如何在通过 .ajaxForm() 提交表单之前执行一些操作?

    我正在使用 ajaxForm 框架来发送我的数据 而无需重新加载我的页面 ReplayForm ajaxForm success function data alert Success 现在 我想在提交表单之前检查一些条件 如果条件为假 则
  • 设置双指缩放时精确的滚动位置

    我正在创建一个地图应用程序 它将标记图像放置在画布上并滚动到它 我正在使用浏览器的捏缩放和滚动来放大 缩小地图 然而 我注意到有一些奇怪的行为 我想知道如何解决它 这有点难以解释 但我们开始吧 假设您处于网页的标准缩放级别 无法进一步缩小
  • JS 保留以零结尾的小数[重复]

    这个问题在这里已经有答案了 在JavaScript中 是否可以 锁定 十进制数 以保留以零结尾的 浮点数 例如 我有 2 个不同的数字 如下所示 伪代码 let a 1 0 let b 1 00 a b true should be fal
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 将 Firebase FCM 添加到 ReactJS 应用程序

    我正在尝试向我的 ReactJS 应用程序中的用户发送推送通知 我已添加 firebase 请求用户通知权限 这正在发挥作用 但现在我想注册设备令牌 但这给了我错误 消息传递 我们无法注册默认的 Service Worker 无法注册 Se
  • 为什么在 JavaScript 中 if([]) 被验证而 [] == false ?

    if false alert empty array is false alert alert 0 if alert empty array is true 他们都会运行警报 Demo http jsfiddle net roine ZFD
  • 如何在 Web 服务器上设置 gzip 压缩?

    我有一个嵌入式网络服务器 总共有 2 兆空间 通常 您使用 gzip 文件对客户端有利 但这会节省我们在服务器上的空间 我读到你可以只 gzip js 文件并将其保存在服务器上 我在 IIS 上测试过 但没有任何运气 为了使这项工作成功 我
  • 如何仅显示/隐藏此 bootstrapvue 表的第二列和第三列?

    下面的代码将显示 隐藏 a 中的所有列BootstrapVue桌子 代码的来源就是这里的答案 使用 bootstrap vue 组件和 bootstrap 3 动态显示 隐藏列 https stackoverflow com questio
  • 如何使用新的analytics.js跟踪多个帐户?

    我需要使用 Google 的新的analytics js 跟踪一个页面上两个帐户的综合浏览量 有大量教程和示例如何使用较旧的 ga js 进行操作 但我发现的只是这个分析文档页面 https developers google com an
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 如何在画布上所有其他内容后面绘制图像? [复制]

    这个问题在这里已经有答案了 我有一块画布 我想用drawImage在画布上当前内容后面绘制图像 由于画布上已经有内容 我正在使用字面上的画布来创建包含图像的画布 因此我无法真正先绘制图像 所以我无法使用drawImage在我呈现其余内容之前
  • 摩纳哥:如何添加内联自动完成/代码建议?

    我找不到任何有关如何添加内联自动完成功能的示例 如下图所示 有人可以指导我如何在摩纳哥做到这一点吗 这可以在 v1 66 中启用 现在在 Insiders 中 The editor quickSuggestions设置现在接受内联为 配置值
  • 尝试使用 Javascript 解决对称差异

    我正在尝试找出对称的解决方案 使用 javascript 完成以下任务的差异 目标 接受未指定数量的数组作为参数 保留数组中数字的原始顺序 不删除单个数组中数字的重复项 删除数组中出现的重复项 因此 例如 如果输入是 1 1 2 6 2 3
  • 使用 ref 触发反应 dropzone 不起作用

    我正在实现这个库 https github com felixrieseberg React Dropzone Component https github com felixrieseberg React Dropzone Compone
  • PDF 在 Safari 中隐藏 Jquery Modal

    这是与我有关的事情this https stackoverflow com questions 24052681 pdf hide jquery modal in ie问题 在 IE 中 我在对话框中使用 iframe 解决了问题 所以它工
  • 为什么 Node.js 应用程序只能从 127.0.0.1/localhost 访问?

    我本来打算教我的朋友介绍 Node 但是后来 我想知道为什么这个代码来自nodejs org var http require http http createServer function req res res writeHead 20
  • d3.event.translate 在触摸设备的缩放上包含 NaN

    我使用 d3 为我的 svg 编写了一个自定义缩放函数 如下所示 Zoom behavior function myzoom xpos d3 event translate 0 ypos d3 event translate 1 vis a
  • 确定 Javascript 中的日期相等性

    我需要找出用户在 Javascript 中选择的两个日期是否相同 日期以字符串 xx xx xxxx 形式传递给该函数 这就是我需要的全部粒度 这是我的代码 var valid true var d1 new Date datein val

随机推荐

  • 如何在R中将文本拆分为两个有意义的单词

    这是我的数据框 df 中的文本 其中有一个名为 problem note text 的文本列 SSCIssue 钞票分配器故障执行检查 分配器故障 要求商店取出钞票分配器并将其放回去 仍然错误消息说前门已打开 因此 CE attn req联
  • PHP mysqli_multi_query 大插入问题

    我尝试了很多方法试图插入从文本文件解析的大量数据 在我的服务器上大约 2 秒内将 200 000 行文本解析到数组中 所以我知道这部分不是问题 我使用的 mysqli multi query 以 5 000 块为单位发送查询 出于某种原因
  • 如何在 SQL-Server 中创建一个只能访问一张表并且只能插入行的用户

    我有一个 SQL Server 数据库 很快就会有两个数据库 我将其用于网站 我已经有一个数据库 1 的只读用户帐户 用于搜索我们的产品库存 我想仅为数据库 2 仅表 1 创建一个单独的帐户 该帐户仅允许插入记录 不允许更新或删除或其他任何
  • 使用 sympy 在特定点评估雅可比行列式

    我试图在 x y 0 0 处评估雅可比行列式 但无法这样做 import sympy as sp from sympy import import numpy as np x y sp symbols x y real True J Fun
  • 如何使用ipad的objective-c发送/接收soap对象

    我一直在尝试为 ipad 编写一个 Objective C 应用程序来发送 接收肥皂网络服务 我已经写了一个代码 但它给出了一个错误 网络服务正在在线运行 这是我的代码 IBAction invokeService txt1 resignF
  • 使用 Calendar.getInstance() 与 new GregorianCalendar() 获取当前日期时间

    使用获取日期时间之间可能有什么区别 Calendar getInstance vs new GregorianCalendar 在源码中寻找日历 getInstance http download oracle com javase 6 d
  • SendKeys 在 Fraps 上不起作用

    对于那些不熟悉 frap 的人 它的屏幕录制程序可以通过快捷键触发 我正在使用 SendKeys SendWait 调用来触发 fraps 我注意到这不会触发 fraps 来录制任何视频 但如果我手动按下该键 fraps 就会被录制 有没有
  • 具有代理设置的 AWS API Gateway 自定义授权方 - 将自定义标头添加到请求

    我拥有的 AWS API 网关设置为代理 proxy 自定义 Auth 函数 用于授权此代理设置的传入请求 自定义身份验证函数正在通过 上下文 对象传递我想要传递给请求的附加信息 如下所示 principalId yyyyyyyy 政策文件
  • symfony2 twig 渲染,抛出异常

    所以在我的基本模板中 我有 render EcsCrmBundle Module checkClock 然后我创建了 ModuleController php
  • NuGet 中的包依赖项解析和命名冲突

    在我的工作团队中 我们依赖两个 NuGet 源 来自 NuGet org 的官方源用于公共包 文件服务器上的文件夹用于内部包 这对我们来说效果很好 但我认为我们有一个潜在的问题 看起来 NuGet 根据包名称和版本号来解析依赖项 由于只有一
  • React hooks 状态没有在日志中更新

    如果我写 function Component const isLoading setLoading useState true const request gt setLoading true console log isLoading
  • 如何将action分派到特定的reducer?

    我有多个减速器 每个减速器都有一个类型 INIT 我想要实现的是 从触发动作的位置来看 只有相关的减速器才能接收该动作 有没有中间件可以做到这一点 您在创建减速器时是否重复使用减速器逻辑 你可以尝试这样的事情 function create
  • 如何应用结构偏移?

    我有一个结构 typedef struct foo int lengthOfArray1 int lengthOfArray2 int array1 int array2 foo 我需要为整个结构及其数组的内容分配足够的内存 所以假设每个数
  • C# Var 与 Target 类型的 new

    C 9 was 正式宣布 https devblogs microsoft com dotnet welcome to c 9 0 几天前 一项新的语言功能是 目标类型的新表达式 它的用法与var 比较以下声明 我很好奇哪个性能更高 如果有
  • Rails 复制了资源中的参数

    我正在使用 Angular 资源 但我不明白为什么 Rails 会重复参数并将其放在资源名称中 我只需要了解为什么会发生这种情况 post data title asdsad rails parameters Parameters titl
  • 如何在 nginx.conf 中引用操作系统环境变量

    在 nginx conf 中 设置变量后set name value 我可以像这样参考它 name 但是当我导出操作系统环境变量时 经过env name from env like https nginx org en docs ngx c
  • 如何查找数字的二进制表示形式中 1 的个数?

    从其他搜索中 我发现这个问题被称为 汉明权重 或 人口计数 这么多的统计数据已经给出了很多答案吗 我需要以简单的方式找到解决方案吗 复杂性并不是什么大问题 JavaScript 中是否有像 Java 的 Integer bitCount 这
  • 如何通过对 R 中的变量进行分组来为折线图着色?

    我制作了一个线图 看起来像这样 我有 50 个国家及其过去 10 年 GDP 的数据集 样本数据 Country variable value China Y2007 3 55218e 12 USA Y2007 1 45000e 13 Ja
  • Flask 中的动态导航

    我有一个在 Flask 中工作的非常简单的网站 它全部由 sqlite 数据库提供支持 每个页面都作为页表中的一行存储 其中包含路径 标题 内容等内容 该结构是分层的 其中页面可以有父级 例如 虽然 关于 可能是一个页面 但也可能有 关于
  • 如何比较嵌套数组中的父记录和子记录?

    我在层次结构中有如下所示的节点 Node 1 Node 1 1 Node 1 1 1 现在我想检查父节点和子节点之间的连接是否定义 父级和子级之间的连接定义如下 例如 Node 1 和 Node 1 1 之间 connections joi