2015-06-21 134 views
0

谢谢大家的反馈,因为这是我的第一个问题。我会再尝试。获取节点的JSON父节点

我有一个JSON对象,例如:

var obj =  { 
     "data":[ 
      { 
      "data":{ 
       "title":"title1", 
       "attr":{ 
        "id":111 
       } 
      }, 
      "children":[ 
       { 
        "data":{ 
         "title":"title2", 
         "attr":{ 
         "id":222 
         } 
        }, 
        "children":[ 
         { 
         "data":{ 
          "title":"title3", 
          "attr":{ 
           "id":333 
          } 
         } 
         } 
        ] 
       }, 
       { 
        "data":{ 
         "title":"title4", 
         "attr":{ 
         "id":444 
         } 
        }, 
        "children":[ 
         { 
         "data":{ 
          "title":"title5", 
          "attr":{ 
           "id":555 
          } 
         } 
         } 
        ] 
       } 
      ] 
      } 
     ] 
    }; 

带给定值的ID,我想通过标题属性,以追踪“血统”,以它为:给222,我应该得到冠军1;给定id 333,我应该得到title1> title 2;给予id 555,我应该得到title1> title 4.请注意,这些不是父母,而是父母的兄弟姐妹,因为每个数据对象都与一组“children”对象配对。

我试过如下:

var x = 555; 

var path = ""; 
function search(path, obj, target) { 
    for (var k in obj) { 
     if (obj[k] === target) { 
      return path + "['" + k + "']" 
     } 
     else if (typeof obj[k] === "object") {      
      var result = search(path + "['" + [k] + "']", obj[k], target); 
      if (result) 
       return result; 
     } 
    } 
    return false; 
} 

var path = search(path, obj, x); 
console.log(path); // "['data']['0']['children']['1']['children']['0']['data']['attr']['id']" 

,但我没能拿到冠军的属性返回。任何帮助将不胜感激,并感谢大家的耐心。

+1

你做出什么样的努力? –

+1

用以前的评论:http://stackoverflow.com/help/how-to-ask – Jan

回答

0

通过使用循环以查找指定的可以尝试的项目:

var obj={"data":[{"data":{"title":"title1","attr":{"id":111}},"children":[{"data":{"title":"title2","attr":{"id":222}},"children":[{"data":{"title":"title3","attr":{"id":333}},"children":[{"data":{"title":"title4","attr":{"id":444}},"children":[{"data":{"title":"title5","attr":{"id":555}},"children":[]}]}]}]}]}]} 
 

 
var current = obj.data[0], titles = []; 
 

 
while(current.data && current.data.attr.id != 444){ 
 
\t titles.push(current.data.title); 
 
\t current = current.children[0] || {} 
 
} 
 

 
document.write(titles.join(" > "));

+0

谢谢,但如果我的树有兄弟姐妹,就像我上面的新例子,这个答案会失败。我尝试了解它,但无法提出解决方案,请参阅我所尝试的内容。再次感谢! – levProg