为节点获取JSON父级

时间:2015-06-21 23:00:35

标签: javascript json parent-child siblings tree-traversal

感谢大家的反馈,因为这是我的第一个问题。我会再试一次。

我有一个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>标题2;鉴于id 555,我应该得到title1>标题4.请注意这些不是父母,而是父母的兄弟姐妹,因为每个数据对象都与一系列儿童配对#34;对象。

我尝试了以下内容:

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 个答案:

答案 0 :(得分: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){
	titles.push(current.data.title);
	current = current.children[0] || {}
}

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

相关问题