2014-09-03 117 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-如果这是你正在寻找的关键,只需存储你积累的所谓的数组,你就在那里!

接下来,你应该可以用一些参数做一个简单的递归方法:你正在检查的数组的当前点,以及所谓的可能成为结果的累积数组。

我不知道是否有比这更简单的方法。