javascript - js 多维数组的问题
问题描述
[ {'id': 1,'name': 'sys','title': '系统设置','type': 1,'status': 1,'condition': '','pid': 0,'level': 0,'sort': 7,'icon': 'fa-gear','children': [ {'id': 11,'name': 'conf/lst','title': '配置列表','type': 1,'status': 1,'condition': '','pid': 1,'level': 1,'sort': 50,'icon': null,'children': [ {'id': 12,'name': 'conf/add','title': '添加配置','type': 1,'status': 1,'condition': '','pid': 11,'level': 2,'sort': 50,'icon': null,'children': [] }, {'id': 13,'name': 'conf/del','title': '配置删除','type': 1,'status': 1,'condition': '','pid': 11,'level': 2,'sort': 50,'icon': null,'children': [] }, {'id': 14,'name': 'conf/edit','title': '配置编辑','type': 1,'status': 1,'condition': '','pid': 11,'level': 2,'sort': 50,'icon': null,'children': [] }] }, {'id': 9,'name': 'conf/conf','title': '配置项','type': 1,'status': 1,'condition': '','pid': 1,'level': 1,'sort': 50,'icon': null,'children': [] }] }, {'id': 15,'name': 'admin','title': '管理员','type': 1,'status': 1,'condition': '','pid': 0,'level': 0,'sort': 50,'icon': 'fa-user','children': [ {'id': 16,'name': 'admin/lst','title': '管理员列表','type': 1,'status': 1,'condition': '','pid': 15,'level': 1,'sort': 50,'icon': null, }, {'id': 27,'name': 'authrule/lst','title': '权限列表','type': 1,'status': 1,'condition': '','pid': 15,'level': 1,'sort': 50,'icon': null, }, {'id': 30,'name': 'authgroup/lst','title': '用户组','type': 1,'status': 1,'condition': '','pid': 15,'level': 1,'sort': 50,'icon': null, }] }]
上面的json是多维数组,我想用js for循环把children下面的数组输出,但不知道为什么输出不了,也没报错.
$.ajax({ type: 'get', url: '/admin/index/menu', async: true, dataType: ’json’, success: function(res) {for(var i = 0; i < res.length; i++) { console.log(res[i].children); //这个能输出 for (var a=0;a<res[i].children;a++) {console.log(res[i].children[a]); //这个不能输出,也没有报错 }} }})
请问是哪里错了?
问题解答
回答1:$.ajax({ type: 'get', url: '/admin/index/menu', async: true, dataType: ’json’, success: function(res) {for(var i = 0; i < res.length; i++) { console.log(res[i].children); for (var a = 0; a < res[i].children.length; a++) { // <-- 此处少了.length,数字和对象比较大小,结果为false,第二个条件一次也满足不了console.log(res[i].children[a]); }} }}回答2:
a<res[i].children -> a<res[i].children.length
回答3:虽然来晚了,但是我觉得还是可以补充一下
一般我个人比较喜欢使用 foreach 遍历,在 JS 里是(以此例中的代码为例)
res.forEach(r => { r.children.forEach(c => {// do something });});
上面用了es6的箭头函数,如果要在 es5 中写,直接换成 function 表达式就好
回答4:这里应该是要做个递归,推荐了解下递归知识递归遍历节点
相关文章:
1. android - app 协议页面的设计2. angular.js - angular2 有什么cool的loading组件么?3. javascript - 请指条明路,angular的$event,在select中却是undefined?4. 如何更新/删除指定的两条或多条数据5. 使用C#如何导入导出Excel文件?6. javascript - 前端开发 本地静态文件频繁修改,预览时的缓存怎么解决?7. mysql 一个sql 返回多个总数8. javascript - vue组件中使用百度分享初次加载失败?9. 冒昧问一下,我这php代码哪里出错了???10. javascript - 使用 vuex-router-sync寄存路由信息,this.$router params 不能赋值?
