注意:该题目摘录自:https://juejin.im/post/58d088...。我这里稍微做了些修改。
-
题目描述
写一个方法,在一个未知对象中,找出所有的“李鹏” 并 console.log 对象输出它的引用地址,以及对应值。例如下面的一个对象:
var tarrgetObj = {
a: { b: { c: { d: { e: { name: "百度" } }, l: { name: "李鹏--> QQ:3206064928" } } } }, d: "90", e: "90", l: { a: { b: { c: { version: "1.0.0.1", name: "李鹏--> QQ:3206064928" } } } } }
-
解法
这个题目考察的是应该是递归和Js中对object的理解,以及对typeof的应用。
我下面先贴出我自己的解法的核心代码: -
思路讲解
(1)首先,我定义了两个数组path和result。其中path用于记录当前的已经走过的“路径”,它是一个临时变量;而result用于记录全部符合要求的数据。
(2)利用for循环遍历对象。需要注意的是,由于这是个未知“深度”的对象,所以我这里使用了递归。这样就可以把所有的“元素”都遍历一遍。明白了这个之后,下面的代码就是判断“元素”是否为‘object’。(我这里多一句嘴,关于typeof的用法,大家可以参考这里。)如果是object的话,那么就继续递归调用我们的方法;如果不是object,那么我们就取出它的值并判断是否符合我们的要求。如果符合,就把值添加到我们的result数组中。其实,这个思路最最终的一点就是path.pop(),或许有人要问:这里有这一句的代码有什么作用?下面我把调试信息贴出来,大家就能明白。
看了上图,就能明白,这里是利用递归的特点将path中走过的路径 一个一个剔除出去。想要明白这个思路,正确理解递归是前提。真心希望这个题目能够帮助到您。不足之处,还请大家指出。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。