JavaScript深度迭代遍历未知对象
栏目: JavaScript · 发布时间: 6年前
内容简介:面向对象编程的语言,都存在对对象的一些操作,其中就包括遍历未知对象的属性值。常见的遍历对象的方法:但是对象中又含有子对象,对象的属性又是另一个对象,或者更深层嵌套,上面方法就不适用了;
面向对象编程的语言,都存在对对象的一些操作,其中就包括遍历未知对象的属性值。
通常情况
常见的遍历对象的方法:
var o = {
name: 'cloud',
age: 20
}
for (i in o) {
console.log(i + ': ' + o[i]);
}
// name: cloud
// age: 20
特殊情况
但是对象中又含有子对象,对象的属性又是另一个对象,或者更深层嵌套,上面方法就不适用了;
下面使用 递归 实现这个功能:
var o = {
name: {
firstName: 'cloud',
lastName: 'huang'
},
age: 20
}
function myFn(obj) {
for (i in obj) {
console.log(i + ': ' + obj[i]);
// 这里使用递归,属性类型为对象则进一步遍历
if (typeof(obj[i]) == 'object') {
myFn(obj[i]);
}
}
}
myFn(o);
// 输出:
// name: [object Object]
// firstName: cloud
// lastName: huang
// age: 20
这样的话不论对象有多复杂的结构都能全部遍历到位;
困境
但同时,这也是个问题,一些对象层次非常深甚至是死循环的情况就尴尬了,类似于子对象属性与父对象属性一样,尝试用上诉函数遍历一下浏览器的 window
对象就能体会了,你会后悔的;
所以为避免这种尴尬情况,设置一个 迭代深度值 吧,指定遍历到第几代:
var depth = 0; // depth为迭代深度值
function myFn(obj) {
for (i in obj) {
console.log(i + ': ' + obj[i]);
depth++;
if (depth < 10
&& typeof(obj[i]) == 'object') {
myFn(obj[i]);
}
}
}
或者使用一种类似 懒加载 的形式:
function myFn(obj) {
for (i in obj) {
console.log(i + ': ' + obj[i]);
if (typeof(obj[i]) == 'object') {
// 判断用户是否要继续迭代
if (confirmFn('是否深入遍历?')) {
myFn(obj[i]);
}
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- JavaScript 遍历、枚举与迭代的骚操作(上篇)
- JavaScript 遍历、枚举与迭代的骚操作(下篇)
- Java中二叉树的PreOrder遍历——递归与迭代实例
- 设计模式——迭代器模式(遍历王者荣耀和英雄联盟英雄信息)
- 数组常见的遍历循环方法、数组的循环遍历的效率对比
- 迭代器萃取与反向迭代器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First PHP & MySQL(中文版)
Lynn Beighley、Michael Morrison / 苏金国、徐阳 / 中国电力 / 2010-6 / 98.00元
通过《深入浅出PHP&MySQL(影印版)》,你将学习:准备好把你的静态HTML网页提升到下一个层次并使用PHP和MySQL建立数据库驱动的网站了吗?《深入浅出PHP& MysQL》是一本快捷实用的指南,让你的动态网站快速运行。自己动手建立实际应用程序,从视频游戏高分留言板到在线交友网站。当你完成后,你将可以进行验证表单、使用会话ID和cookies工作、执行数据库查询和联接、处理文件I/0操作等......一起来看看 《Head First PHP & MySQL(中文版)》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
UNIX 时间戳转换
UNIX 时间戳转换