我有一个这样的嵌套数组:
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"]
最干净的方法是什么?感谢。
答案 0 :(得分:8)
递归:
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);
答案 1 :(得分:1)
也许这就是 - jsonselect.org。
编辑:我刚刚玩过JSONSelect并且我认为它不适合您的需求,因为JSON没有像xml这样的内在“父”属性。
可以找到具有匹配ID的对象,但无法向上导航。 E.g。
JSONSelect.match(':has(:root > .id:val("4"))', array)
给我回复:
[Object { id="4"}]
这很好,只是因为我无法从那里去任何地方!