Javascript用递归的方式遍历json数组
前言
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数组相关推荐
- Web jquery ajax,EL遍历 js刷新 jquery遍历json数组填充表格 等等随笔
1.ajaX 局部刷新 type- 请求的类型 url- 地址 data- 参数多的话用逗号隔开 在使用 jquery之前先添加:<script type="text/javas ...
- jquery $.each遍历json数组方法
转载地址:http://blog.sina.com.cn/s/blog_636f2d150101ezs1.html <!doctype html public "-//w3c//dtd ...
- html遍历json数组,JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
本文实例讲述了JS遍历JSON数组及获取JSON数组长度操作.分享给大家供大家参考,具体如下: 遍历 JSON 数组: var questions = data.data.questionnaire. ...
- 原生js遍历 json数组对象
//无规律 <script>var json = [{dd:'SB',AA:'东东',re1:123},{cccc:'dd',lk:'1qw'}];for(var i=0,l=json.l ...
- jq遍历json/数组
$(function() {//jq遍历json/数组var json =[{code:"101",val:"1111"},{code:"102&qu ...
- js深度遍历json数组改变属性名
js深度遍历json数组改变属性名 1.适用场景 2.代码实现 1.适用场景 需要将json数组的categoryCode字段更改为value字段 2.代码实现 changeName(oldVal, ...
- 遍历json数组的常用方式
遍历json对象数组 1. 传统数组遍历 var data=[{"name":"zhangsan","age":12},{"nam ...
- layui遍历json数组_shell脚本:json格式化与字段抓取(下)
接上一篇. 2 字段抓取 2.1 规则制定 先规定字段抓取的规则,对于给定的json: .:表示整个json: .fieldName:表示抓取fieldName字段的值,可能是字符串.布尔值.数字,或 ...
- jQuery遍历json数组怎么整。。。
{"options":"[{\"text\":\"王家湾\",\"value\":\"9\" ...
最新文章
- Linux守护进程实现
- linux系统增加swap分区
- Docker 从Docker Hub 拉取镜像慢怎么办?
- 数据结构+算法——错题总结
- Windows杀死结束进程图形化界面操作方法
- 跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用
- 【PAT - 甲级1003】Emergency (25分)(Dijkstra,最短路条数,双权值最短路)
- “天天快报”涉黄被下架?官方回应:不是我 是山寨版APP
- 关于流(文件)的输入,输出与调用(fprintf,fscanf)
- 敏捷开发系列学习总结(4)—Git管理工具sourcetree的安装
- 波卡生态项目Polkalokr将在Polkastarter进行IDO
- [Git] 删除远程仓库的文件
- Linux命令解释之find
- r语言正则表达式_R中的正则表达式
- python进阶与数据操控_python进阶(mysql:表操作、数据操作、数据类型)(示例代码)...
- 分享 MSDN 下载工具(Word/PDF)
- 用友u8 如何配置文件服务器,用友u8服务器软件配置
- 我曾经遇见过一个我最想照顾一生的女孩,后来……没有后来
- 电脑计算机窗口不见了怎么调出来,电脑桌面上的任务栏不见了怎么办
- 2023,快手仍是品牌、商家最值得投入的流量洼地