注意:該題目摘錄自:https://juejin.im/post/58d088...。我這裏稍微作了些修改。數組
-
題目描述post
寫一個方法,在一個未知對象中,找出全部的「李鵬」 並 console.log 對象輸出它的引用地址,以及對應值。例以下面的一個對象:
var tarrgetObj = {spa
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中走過的路徑 一個一個剔除出去。想要明白這個思路,正確理解遞歸是前提。真心但願這個題目可以幫助到您。不足之處,還請你們指出。