搜索一个嵌套的javascript对象,获得一个祖先数组



我有一个嵌套数组,像这样:

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

我需要通过它的id找到一个嵌套对象,并获得它的所有父对象,生成一个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/

可能是this - jsonselect.org

EDIT:我刚刚玩了JSONSelect,我不认为它适合你的需要,因为JSON没有像xml那样的内在"父"属性。

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

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

返回我:

[Object { id="4"}]

这很好,只是我哪儿也去不了!

最新更新