前言

Javscript语言有很多值得探究和注意的地方,下面我们来看一下用递归的方式遍历JSON对象数组。

正文

假设我们的要遍历的数组是这样的:

var array = [{id: 1,children:[{id:2,children:[]}]},{id:3,children:[]},{id:4,children:[{id:5,children:[{id:6,children:[]},{id:7,children:[]}]}]}];

这是一个数组,假如我们想找出id为7的对象,可以用如下的函数:

        var find = function(arr, id){arr.forEach((item) => { if(item.id==id){        return item;}else if(item.children.length > 0){find(item.children, id);                        }                   })}var item = find(array, 7);console.log(item);

看起来没什么问题,只是简单的递归,但是最后得到的输出却是undefined。这是因为函数里的return语句,所返回的其实是arr.forEach这个匿名函数的返回值,而我们所调用的find函数实际上却没有返回值,所以当我们输出item的时候会得到undefined。这里的解决方法是,在函数外面定义一个变量,然后在函数语句中return之前,把找到的对象赋给这个变量:

        var returnedItem;var find = function(arr, id){arr.forEach((item) => { if(item.id==id){        returnedItem = item;return item;}else if(item.children.length > 0){find(item.children, id);                        }                   })}var item = find(array, 7);console.log(returnedItem);

修改后的输出为

这样一切就正常了。

结尾

出现这样的情况主要还是因为javascript对于return这个关键字的处理和java语言稍有不同。在上面的修改后的代码中,其实完全省略掉return语句,因为每个对象的id是唯一的,returnedItem在被赋值以后也不会再变化。这里的return只是起到了一个跳出循环的作用,在遍历量很大的时候可以保留下来,这样在我们遍历到想要的item之后可以让程序省去遍历剩余数组的步骤,提高效率。

Javascript用递归的方式遍历json数组相关推荐

  1. Web jquery ajax,EL遍历 js刷新 jquery遍历json数组填充表格 等等随笔

    1.ajaX 局部刷新 type- 请求的类型   url- 地址  data- 参数多的话用逗号隔开 在使用 jquery之前先添加:<script type="text/javas ...

  2. jquery $.each遍历json数组方法

    转载地址:http://blog.sina.com.cn/s/blog_636f2d150101ezs1.html <!doctype html public "-//w3c//dtd ...

  3. html遍历json数组,JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】

    本文实例讲述了JS遍历JSON数组及获取JSON数组长度操作.分享给大家供大家参考,具体如下: 遍历 JSON 数组: var questions = data.data.questionnaire. ...

  4. 原生js遍历 json数组对象

    //无规律 <script>var json = [{dd:'SB',AA:'东东',re1:123},{cccc:'dd',lk:'1qw'}];for(var i=0,l=json.l ...

  5. jq遍历json/数组

    $(function() {//jq遍历json/数组var json =[{code:"101",val:"1111"},{code:"102&qu ...

  6. js深度遍历json数组改变属性名

    js深度遍历json数组改变属性名 1.适用场景 2.代码实现 1.适用场景 需要将json数组的categoryCode字段更改为value字段 2.代码实现 changeName(oldVal, ...

  7. 遍历json数组的常用方式

    遍历json对象数组 1. 传统数组遍历 var data=[{"name":"zhangsan","age":12},{"nam ...

  8. layui遍历json数组_shell脚本:json格式化与字段抓取(下)

    接上一篇. 2 字段抓取 2.1 规则制定 先规定字段抓取的规则,对于给定的json: .:表示整个json: .fieldName:表示抓取fieldName字段的值,可能是字符串.布尔值.数字,或 ...

  9. jQuery遍历json数组怎么整。。。

    {"options":"[{\"text\":\"王家湾\",\"value\":\"9\" ...

最新文章

  1. Linux守护进程实现
  2. linux系统增加swap分区
  3. Docker 从Docker Hub 拉取镜像慢怎么办?
  4. 数据结构+算法——错题总结
  5. Windows杀死结束进程图形化界面操作方法
  6. 跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用
  7. 【PAT - 甲级1003】Emergency (25分)(Dijkstra,最短路条数,双权值最短路)
  8. “天天快报”涉黄被下架?官方回应:不是我 是山寨版APP
  9. 关于流(文件)的输入,输出与调用(fprintf,fscanf)
  10. 敏捷开发系列学习总结(4)—Git管理工具sourcetree的安装
  11. 波卡生态项目Polkalokr将在Polkastarter进行IDO
  12. [Git] 删除远程仓库的文件
  13. Linux命令解释之find
  14. r语言正则表达式_R中的正则表达式
  15. python进阶与数据操控_python进阶(mysql:表操作、数据操作、数据类型)(示例代码)...
  16. 分享 MSDN 下载工具(Word/PDF)
  17. 用友u8 如何配置文件服务器,用友u8服务器软件配置
  18. 我曾经遇见过一个我最想照顾一生的女孩,后来……没有后来
  19. 电脑计算机窗口不见了怎么调出来,电脑桌面上的任务栏不见了怎么办
  20. 2023,快手仍是品牌、商家最值得投入的流量洼地

热门文章

  1. 社交网络用户并非越多越好
  2. 如何顺利度过新人适应期
  3. C#多线程学习 整理打包电子书
  4. 快速排序(Python实现)
  5. js怎么获取一个元素与屏幕右边的距离_js获取元素到屏幕左上角的距离
  6. 华为鸿蒙王者荣耀视频,王者荣耀鸿蒙2.0版
  7. linux添加匿名用户,vsftpd3.0之匿名用户配置
  8. XamarinEssentials教程设置首选项Preferences的值
  9. php 数组 获取键值,PHP数组_filter获取无键值
  10. python管道_python中管道用法入门,举个例子