Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索嵌套javascript对象,获取祖先数组_Javascript_Jquery_Search_Nested - Fatal编程技术网

搜索嵌套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);