JavaScript 在 JSON 对象中递归搜索

2023-12-08

我正在尝试返回 JSON 对象结构中的特定节点,如下所示

{
    "id":"0",
    "children":[
        {
            "id":"1",
            "children":[...]
        },
        {
            "id":"2",
            "children":[...]
        }
    ]
}

所以这是一个树状的子父关系。每一个node有一个唯一的ID。 我正在尝试寻找一个具体的node像这样

function findNode(id, currentNode) {

    if (id == currentNode.id) {
        return currentNode;
    } else {
        currentNode.children.forEach(function (currentChild) {            
            findNode(id, currentChild);
        });
    }
}  

我执行搜索例如findNode("10", rootNode)。但即使搜索找到匹配项,该函数也始终返回undefined。我有一种不好的感觉,递归函数在找到匹配项后不会停止并继续运行最终返回undefined因为在后面的递归执行中它没有到达返回点,但我不知道如何解决这个问题。

请帮忙!


递归搜索时,必须通过返回的方式将结果传回。你没有返回结果findNode(id, currentChild), 尽管。

function findNode(id, currentNode) {
    var i,
        currentChild,
        result;

    if (id == currentNode.id) {
        return currentNode;
    } else {

        // Use a for loop instead of forEach to avoid nested functions
        // Otherwise "return" will not work properly
        for (i = 0; i < currentNode.children.length; i += 1) {
            currentChild = currentNode.children[i];

            // Search in the current child
            result = findNode(id, currentChild);

            // Return the result if the node has been found
            if (result !== false) {
                return result;
            }
        }

        // The node has not been found and we have no more options
        return false;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 在 JSON 对象中递归搜索 的相关文章

  • 网络上的等角柱状图

    我计划为游戏的标记 图钉 构建在线地图 但我无法设置标记的正确纬度 原始地图是一个2048 2048px 的正方形 然后我得到了标记 数千个 地图坐标使用 0 到 100 之间的 x y 表示法设置 0 0 是top left角和100 1
  • jq:根据 group by 计算嵌套对象值

    Json account 1 cost usage low totalcost 2 01 account 2 cost usage low totalcost 2 25 account 1 cost usage low totalcost
  • 用更好的模式替换开关(Javascript)

    我必须升级我的应用程序以根据用户类型和角色属性显示页面 目前 我使用一个简单的 switch 语句来根据用户类型来执行此操作 例如 switch type case a return CONSTANT ONE case b return C
  • ASP.NET 验证控件和 Javascript 确认框

    我有一个使用 NET 服务器端输入验证控件的页面 此页面还有一个 javascript 确认框 在提交表单时会触发该确认框 当前 当选择 提交 按钮时 会出现 javascript 确认框 一旦确认 就会触发 ASP NET 服务器端验证控
  • 无需重定向的 HTML 页面提交

    有没有什么方法可以在不使用ajax的情况下提交html表单而无需从当前页面重定向 你可以设置一个target 为您form 这样您就可以将表单提交到新选项卡 target blank 或一个小的 隐藏的iframe target nameo
  • Twitch API - 无法使用 PHP 获取身份验证令牌

    stackoverflow 的成员们大家好 我不是一个喜欢寻求帮助的人 但在这种情况下 我认为这是解决我的问题的唯一方法 谷歌并没有给我太大帮助 所以 我的问题 我想使用 Twitch API 获取一些数据 听起来很容易 我希望是这样 下面
  • 为什么Promise中的代码会同步执行? [复制]

    这个问题在这里已经有答案了 在我的项目中 我有一个很长时间运行的操作 所以我决定将其放入Promise因为我认为这样我就可以在里面的代码继续执行其他操作Promise正在跑步 调试的时候发现外面的代码Promise仅当里面的代码执行Prom
  • 如何将焦点设置在 BootStrap 中的第一个输入字段上? [复制]

    这个问题在这里已经有答案了 可能的重复 如何将焦点设置到独立于 id 的 HTML 表单中的第一个输入元素 https stackoverflow com questions 277544 how to set the focus to t
  • 在给定索引上将字符串分成两部分并返回两部分

    我有一个字符串 需要在给定索引上拆分 然后返回两个部分 并用逗号分隔 例如 string 8211 8 211 98700 98 700 因此 我需要能够在任何给定索引上拆分字符串 然后返回字符串的两半 内置方法似乎执行分割 但只返回分割的
  • 使用 eval 时不会受到 XSS 威胁

    我正在制作 不是现在 但我仍然对这个感到好奇 一款使用 HTML5 和 JS 的游戏 我想要的是人们可以插入自定义脚本 但要安全 function executeCustomJS code eval code bad 当然这段代码非常糟糕
  • 为什么浏览器允许onmousedown JS改变href?

    我很长时间以来都注意到 当您尝试复制链接位置或在 Facebook 上打开链接时 它会修改链接并将其传递给l php 例如 我可以被发送到 http www facebook com l php u http 3A 2F 2Fwww goo
  • 如何在数据表角度中基于 JSON 动态填充表值?

    我在用着Angular 数据表 https l lin github io angular datatables 我需要能够根据返回的数据动态创建表 换句话说 我不想指定列标题 Example json数据 id 2 city Baltim
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 如何禁用网页中的萤火虫?

    如何使用 Javascript 禁用 firebug 我想这样做是为了向访问者隐藏我的网页的运作方式 有什么选择可以做到这一点吗 你不能 你能做的最好的事情就是混淆你的 JavaScript 实际上刮掉了 您能做的最好的事情就是将所有安全关
  • jQuery:向左滑动和向右滑动

    我见过slideUp and slideDown在 jQuery 中 左右滑动的功能 方式怎么样 您可以使用 jQuery UI 中的附加效果来做到这一点 详情请参阅此处 http docs jquery com UI Effects Sl
  • jQuery UI 对话框 - 关闭后无法打开

    我有一个问题jquery ui dialog box https jqueryui com dialog 问题是 当我关闭对话框然后单击触发它的链接时 除非刷新页面 否则它不会再次弹出 如何在不刷新实际页面的情况下回调对话框 下面是我的代码
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 你能快速告诉我这个伪代码是否有意义吗?

    我相信我的代码现在是万无一失的 我现在将写出伪代码 但我确实有一个问题 为什么 DRJava 要求我返回 if 语句之外的内容 正如你所看到的 我为 ex 写了 return 1 只是因为它问了 但是它永远不会返回该值 谁可以给我解释一下这
  • 突出显示单词并提取其附近文本的函数

    我有一个文本例如 Etiam porta semmalesuada magna mollis euismod 整数取数 ante venenatis dapibus posuere velit aliquet 埃蒂亚姆 门塔 塞姆 male
  • 拉斐尔路径交叉点不起作用

    我对拉斐尔和 pathIntersection method JSFiddle 示例 http jsfiddle net t6gWt 2 您可以看到有两条线都与曲线相交 但当我使用 pathIntersection method 有一个未解

随机推荐

  • 如何在构建 Docker 映像时恢复 Postgres 转储?

    我试图避免在工作流程中接触共享开发数据库 为了使这更容易 我希望在我的磁盘上有 Docker 映像定义来满足我需要的模式 然而 我坚持制作一个 Dockerfile 该文件将创建一个已恢复转储的 Postgres 映像 我的问题是 在构建
  • CMakeLists.txt 可以依赖于函数解析的文件吗?

    我对 CMake 相当陌生 第一次从一个由许多子项目组成的较大项目开始 出于特殊原因 如下所述 出于好奇 我已经有了一组包含文件 其中包含有关每个 CMake 目标 lib 或 exe 所需的源文件的信息 目前 我更喜欢 重新 使用这些文件
  • 处理 Recyclerview 中的点击项

    我有一个卧式回收机view inside 垂直回收视图 我添加列表cardview inside 卧式回收机view 当点击主活动的项目时如何获取项目信息 谢谢 public class MainActivity extends AppCo
  • 使用 xslt 从 xpath 语句列表中注释 xml 实例

    给定一个 xpath 语句列表 我想编写一个样式表 它将运行一个 xml 文档并输出相同的文档 但在每个 xpath 语句中标识的节点之前插入注释 我们来举个例子 从包含 xpath 语句的 xml 实例开始
  • 没有 ID 的清除超时

    有什么办法可以清除吗setTimeout 如果它没有明确的 ID 问题是我不允许更改一些已经运行的代码并在没有任何处理程序的情况下设置计时器 JS 是否为它们设置了 匿名处理程序 这些计时器是否存储在可访问的地方 我可以获得这些属性中的任何
  • 格式错误的字符串 ValueError ast.literal_eval() 与元组的字符串表示形式

    我正在尝试从文件中读取元组的字符串表示形式 并将该元组添加到列表中 这是相关代码 raw data userfile read split n for a in raw data print a btc history append ast
  • Rails 3 用户匹配算法到 SQL 查询(复杂)

    我目前正在开发一款根据回答的问题匹配用户的应用程序 我在正常的 RoR 和 ActiveRecord 查询中实现了我的算法 但使用它的速度很慢 将一个用户与其他 100 个用户进行匹配需要 Completed 200 OK in 17741
  • android:将 Android Studio 升级到 2.3 后无法构建项目

    因此 很高兴将我的 Android Studio 从稳定版本 2 2 更新到金丝雀通道 2 3 但不幸的是 它有严重的错误 项目无法构建 我尝试打开以前的项目并尝试创建新的示例应用程序 但出现了以下相同的错误 Gradle MyApplic
  • 删除两个字符串的相等部分

    在 PHP 中 我在服务器上有两条路径 它们都有匹配的部分 我想加入他们 但删除相同的部分 EXAMPLE 路径 1 home7 用户名 public html 目录 anotherdir wp content uploads 路径 2 d
  • 在 Swift 中使用 TWTRShareEmailViewController (Fabric Twitter SDK) 请求用户 Twitter 邮件

    我想请求该用户的 Twitter 邮件 在https dev twitter com twitter kit ios request email我们可以在 Obj C 中看到代码 但我需要 Swift 中的代码 但我无法翻译它 请问有人知道
  • 可疑文件操作..连接的路径...位于基本路径组件之外

    尝试将 png 文件上传到管理图像表中时出现错误 可疑文件操作位于 admin products productimage add 连接的路径 product images Laptop Computer 5 copy png 位于基本路径
  • 确保 DateTime 属性返回 DateTimeKind.Utc

    是否可以在实体对象中定义 DateTime 属性Kind DateTimeKind Utc通过使用 edmx 文件或 t4 模板 如果可能使用 t4 请描述如何更改属性 目前该属性生成为 EdmScalarPropertyAttribute
  • iPhone上取消控制播放音乐时如何设置标题?

    我正在开发一个广播应用程序 它支持在后台播放音乐 但我陷入了如何设置音乐标题以取消控制的困境 The difference between my app and Music is as following 我应该怎么做才能让我的应用程序显示
  • 如何判断字符串中的所有字符是否相等

    我需要知道字符串中的所有字符是否都相等 由同一字符组成 该函数必须返回 true 或 false 具体取决于字符串的所有元素是否等于特定字符 我编写的这个函数运行良好 但我正在寻找更优化 最快 的解决方案 字符串可以有数千个字符 funct
  • python中大写字母组的分割

    我正在尝试使用大写字母作为分隔符来标记多个字符串 我已经找到了以下代码 token a for a in re split r A Z a z ABCowDog if a print token 正如预期的那样 我得到了回报 A B 牛 狗
  • Ruby:为什么所有坐标都会在数组数组中更新?

    我正在尝试更改特定坐标 但数组正在全部更新 目标是改变fixed属性为单个坐标 class Case attr accessor fixed def initialize self fixed false end def fixed fix
  • 如何使用 javascript 或 Jquery 更改屏幕方向?

    我正在使用 Phonegap 为 Android 和 iphone 开发一个应用程序 当我从一个页面导航到另一页面时 我需要更改屏幕方向 任何人都可以告诉它如何通过 java 脚本或 jquery 来完成吗 谢谢 你可以试试这个 windo
  • 如何使用 python 在 selenium 中加载 chrome 驱动程序中的扩展

    我打开启用了 Browsec 扩展的 Chrome 浏览器的所有努力都失败了 这是我上次尝试过的 Configure the necessary command line option options webdriver ChromeOpt
  • 同一类的多个领域表

    我有一个 RealmObject 类 我想要同一类的多个表 我可以在单个领域 数据库 中执行此操作吗 或者我需要有多个领域 每个领域一个表 如果必须是多个Realm Realm切换过程有多快 我想要同一类的多个表 那么你有两个合理的选择 1
  • JavaScript 在 JSON 对象中递归搜索

    我正在尝试返回 JSON 对象结构中的特定节点 如下所示 id 0 children id 1 children id 2 children 所以这是一个树状的子父关系 每一个node有一个唯一的ID 我正在尝试寻找一个具体的node像这样