搜索嵌套的javascript对象,获取祖先数组

我有一个这样的嵌套数组:

array = [ { "id": "67", "sub": [ { "id": "663", }, { "id": "435", } ] }, { "id": "546", "sub": [ { "id": "23", "sub": [ { "id": "4", } ] }, { "id": "71" } ] } ] 

我需要通过其id找到1个嵌套对象并获取其所有父节点,从而生成一个id数组。

 find.array("71") => ["546", "71"] find.array("4") => ["546", "23", "4"] 

最干净的方法是什么? 谢谢。

递归:

 function find(array, id) { if (typeof array != 'undefined') { for (var i = 0; i < array.length; i++) { if (array[i].id == id) return [id]; var a = find(array[i].sub, id); if (a != null) { a.unshift(array[i].id); return a; } } } return null; } 

用法:

 var result = find(array, 4); 

演示: http : //jsfiddle.net/Guffa/VBJqf/

也许这就是 – jsonselect.org 。

编辑 :我刚刚玩过JSONSelect并且我认为它不适合您的需求,因为JSON没有像xml这样的内在“父”属性。

可以找到具有匹配ID的对象,但您无法从中向上导航。 例如

JSONSelect.match(':has(:root > .id:val("4"))', array)

回报我:

[Object { id="4"}]

这很好,只是我不能去那里的任何地方!