文章出自个人博客https://knightyun.github.io/2019/01/27/js-iteration,转载请申明


面向对象编程的语言,都存在对对象的一些操作,其中就包括遍历未知对象的属性值。

通常情况

常见的遍历对象的方法:

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深度迭代遍历未知对象相关推荐

  1. IOS遍历未知对象属性、函数

    转:http://blog.csdn.net/chaoyuan899/article/details/24399761 #import <objc/runtime.h>@implement ...

  2. 如何在html页面遍历对象,javascript如何循环遍历对象?

    在JavaScript中有多种循环遍历对象的方法,下面本篇文章就来给大家介绍一下使用JavaScript循环遍历对象的方法,希望对大家有所帮助. 1.使用for 循环 for 循环是 Js 中最常用的 ...

  3. JavaScript 迭代器 迭代对象

    1.什么是迭代器? --------------------------------------什么是迭代器?         迭代器(iterator),是确使用户可在容器对象(container, ...

  4. php json 遍历 keys,详解javascript遍历json对象的key和任意js对象属性的示例代码(图)...

    下面小编就为大家带来一篇javascript遍历json对象的key和任意js对象属性实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 使用 keys 方法获取该对象 ...

  5. JavaScript 可迭代对象

    Javascript 可迭代对象 小插曲 我之前学到了对象与数组进行拼接,如果对象不加 [Symbol.isConcatSpreadable]:true,对象不会当作数组处理,反之,对象的元素将会像数 ...

  6. javascript遍历json对象数据的方法

    JSON中,有两种结构:对象和数组,对象是没有length这个属性,而数组结构是有的,下面分别说下这两种结构之间的区别和遍历方式. 1.对象 一个对象以"{"开始,"}& ...

  7. 在JavaScript中逐个遍历数组?

    如何使用JavaScript遍历数组中的所有条目? 我以为是这样的: forEach(instance in theArray) 其中theArray是我的数组,但这似乎是不正确的. #1楼 如果您不 ...

  8. js循环/迭代/遍历有多少方法

    js循环/迭代/遍历有多少方法 JavaScript中存在着很多循环的方法 常见的有for,while,do while,for in等, ES5中的forEach, ES6的for of , jqu ...

  9. 自学JavaScript第二天- JS 进阶: 对象 函数

    自学JavaScript第二天- JS 进阶: 对象 函数 对象进阶 构造函数 使用类 类的继承 静态方法 函数进阶 方法 装饰器 高阶函数 map / reduce filter sort ever ...

最新文章

  1. ubuntu开机启动管理
  2. 在Windows下搭QT编程环境
  3. 洛谷——P1177 【模板】快速排序
  4. Bella Email邮件发送模板
  5. Matplotlib 中文用户指南 4.5 标注
  6. LINUX系统用户操作命令
  7. 通过手动抛自定义异常实现spring事务回滚
  8. git个人常用的命令
  9. 显示器用软件调整亮度_如何使用正确的软件调整电脑显示器的亮度
  10. 文本特征提取:词袋模型/词集模型,TF-IDF
  11. 认识计算机软件的教学过程,《认识计算机》教学设计
  12. 营养与心理的眼睛保健方法
  13. 【Latex】用Acrobat剪切pdf文件中图
  14. 儿童用灯哪个品牌好?推荐专业的儿童护眼台灯
  15. 漏洞工具包2015年态势回顾:规模与分布
  16. 机器学习(回归五)——线性回归-局部加权线性回归
  17. 2023哈尔滨工程大学计算机考研信息汇总
  18. MATLAB中 feval 函数的用法
  19. Java(设计模式)
  20. Java 的业务逻辑验证框架 fluent-validator

热门文章

  1. 201621123015《Java程序设计》第10周学习总结
  2. Jenkins安装部署篇
  3. 通过用户登陆消息类,来学习面向对象的实体统一接口和验证统一接口
  4. CreateCompatibleBitmap
  5. 《Asp.Net 2.0 揭秘》读书笔记(九)
  6. 表单组件中state依赖props
  7. 《三国演义》人物数据分析
  8. Derek解读Bytom源码-P2P网络 地址簿
  9. 前端组件化的三种方案:
  10. C++ 预处理器和名称空间