前端題目--在未知對象中找出特定的目標

注意:該題目摘錄自:https://juejin.im/post/58d088...。我這裏稍微作了些修改。數組

  1. 題目描述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"
                   }
               }
           }
       }
     }
  2. 解法
    這個題目考察的是應該是遞歸和Js中對object的理解,以及對typeof的應用。
    我下面先貼出我本身的解法的核心代碼:
    圖片描述
  3. 思路講解
    (1)首先,我定義了兩個數組path和result。其中path用於記錄當前的已經走過的「路徑」,它是一個臨時變量;而result用於記錄所有符合要求的數據。
    (2)利用for循環遍歷對象。須要注意的是,因爲這是個未知「深度」的對象,因此我這裏使用了遞歸。這樣就能夠把全部的「元素」都遍歷一遍。明白了這個以後,下面的代碼就是判斷「元素」是否爲‘object’。(我這裏多一句嘴,關於typeof的用法,你們能夠參考這裏。)若是是object的話,那麼就繼續遞歸調用咱們的方法;若是不是object,那麼咱們就取出它的值並判斷是否符合咱們的要求。若是符合,就把值添加到咱們的result數組中。其實,這個思路最最終的一點就是path.pop(),或許有人要問:這裏有這一句的代碼有什麼做用?下面我把調試信息貼出來,你們就能明白。
    圖片描述
    看了上圖,就能明白,這裏是利用遞歸的特色將path中走過的路徑 一個一個剔除出去。想要明白這個思路,正確理解遞歸是前提。真心但願這個題目可以幫助到您。不足之處,還請你們指出。
相關文章
相關標籤/搜索