搜索嵌套的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"}]
这很好,只是我不能去那里的任何地方!