2014-09-03 154 views
-2

我想知道JSON對象中的遞歸鍵。例如,JSON對象就像基於JSON值獲取密鑰

{ 
    "Division1" : { 
     "checked": true, 
     "level": 1, 
     "District1-1": { 
      "checked": true, 
      "level": 2, 
      "Area1-1-1": { 
       "checked": true, 
       "level": 3, 
       "Project1-1-1-1": { 
        "checked": true, 
        "level": 4 
       } 
      }, 
      "Area1-1-2": { 
       "checked": true, 
       "level": 3, 
       "Project1-1-2-1": { 
        "checked": true, 
        "level": 4, 
        "05": { 
         "checked": true, 
         "level": 5 
        } 
       } 
      } 
     } 
    } 
} 

,我能夠找到「Project1-1-1-1」,我應該能夠找到並存儲「Area1-1-1」如何執行遞歸搜索來存儲父/祖父鍵?「District1-1」,「Division1」在數組中,

我使用JavaScript來實現這一點

當前JS:

 var parent = []; 
     $.test.getObjects = function(obj, key, val) { 
      var objects = []; 
      for (var i in obj) { 

       if (!obj.hasOwnProperty(i)){ continue; } 
       if (typeof obj[i] == 'object') { 
        // console.log(i); 
        parent.push(i); 
        objects = objects.concat($.test.getObjects(obj[i], key, val)); 
       } 
       //if key matches and value matches or if key matches and value is not passed (eliminating the case where key matches but passed value does not) 
       if (i == key && obj[i] == val || i == key && val == '') { // 
        objects.push({"parent": parent,"children": obj}); 
       } else if (obj[i] == val && key == ''){ 
        //only add if the object is not already in the array 
        if (objects.lastIndexOf(obj) == -1){ 
         objects.push({"parent": parent,"children": obj}); 
        } 
       } 
      } 
      return objects; 
     }; 
+1

你可以添加你必須找到的代碼** Project1-1-1-1 **? – funkwurm 2014-09-03 09:51:47

+1

問題是什麼? 「存儲父母/祖父母鑰匙」是什麼意思? – 2014-09-03 09:55:17

+0

@funkwurm我已更新問題 – cs1193 2014-09-03 09:58:43

回答

0

我返工我以前的答案,所以我將其刪除。看起來我根本不理解你的問題:)

AFAIK,Javascript數組/字典不存儲父母關係,所以我認爲你可以這樣做的唯一方法是檢查從父母開始的整棵樹。這些步驟你應該遵循遞歸:

1取得患兒的陣列(使用Object.keys(VAR)方法)

2 - 如果這不是你要找的關鍵,運行遞歸方法爲每個孩子。作爲一個參數,您應該傳遞一個數組,累積之前運行中獲得的所有先前的鍵,並添加您正要訪問的子級的鍵。

3-如果這是你正在尋找的關鍵,只需存儲你積累的所謂的數組,你就在那裏!

接下來,你應該可以用一些參數做一個簡單的遞歸方法:你正在檢查的數組的當前點,以及所謂的可能成爲結果的累積數組。

我不知道是否有比這更簡單的方法。