【问题标题】:searching a nested javascript object, getting an array of ancestors搜索嵌套的 javascript 对象,获取祖先数组
【发布时间】:2011-11-14 22:20:01
【问题描述】:

我有一个这样的嵌套数组:

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"]

最干净的方法是什么?谢谢。

【问题讨论】:

  • 同一个 ID 可以多次出现在你的结构中吗?
  • 使用递归遍历树并在每次迭代时构建父列表。
  • 您对这种数据结构的目标是什么?感觉就像您将不得不遍历所有内容才能获得想要的东西。
  • @rwilliams 嵌套类别。

标签: javascript jquery search nested


【解决方案1】:

也许这是 - jsonselect.org

编辑:我刚刚玩过 JSONSelect,我认为它不适合您的需求,因为 JSON 没有像 xml 这样的内在“父”属性。

可以找到具有匹配 id 的对象,但您不能从那里向上导航。例如

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

返回我:

[Object { id="4"}]

这很好,只是我不能从那里去任何地方!

【讨论】:

  • 谢谢,我真的不认为这是要走的路,这是一个相当大的库,用于简单的事情
  • 是的,我理解并同意!我只是想我会编辑我的答案,原因是我认为这不合适,以防人们想看看我的推理:)
【解决方案2】:

递归:

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/

【讨论】:

    猜你喜欢
    • 2018-10-14
    • 1970-01-01
    • 2017-05-14
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多