搜索嵌套javascript对象,获取祖先数组
我有一个嵌套数组,如下所示:搜索嵌套javascript对象,获取祖先数组,javascript,jquery,search,nested,Javascript,Jquery,Search,Nested,我有一个嵌套数组,如下所示: array = [ { "id": "67", "sub": [ { "id": "663", }, { "id": "435", } ] }, { "id": "546", "sub": [
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"]
最干净的方法是什么?谢谢。也许是这个-
编辑:我刚刚玩过JSONSelect,我认为它不适合您的需要,因为JSON没有xml这样的固有“父”属性
它可以找到具有匹配id的对象,但您无法从中向上导航。例如
JSONSelect.match(':has(:root>.id:val(“4”)),数组)
返回给我:
[Object{id=“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;
}
演示:同一个Id是否可以在您的结构中多次出现?使用递归遍历树并在每次迭代中构建父列表。这种类型的数据结构的目标是什么?感觉上你必须循环所有东西才能得到你想要的东西。@rwilliams嵌套类别。谢谢,我真的不认为这是一个好办法,它是一个相当大的库,我理解并且同意SimpleMeys的东西!我只是想编辑一下我的答案,解释一下为什么我认为这不合适,以防人们想知道我的理由:)
var result = find(array, 4);