4

假设我有一个可以有子对象的层次结构。所有对象都有唯一的id. 我需要从这个层次结构中的任何地方检索一个对象,只给定id. 例如,层次结构可能如下所示:

var 层次结构 = [
  {id:1,孩子:[
    {id:7},
    {编号:8}
  ]},
  {id:2},
  {id:3,孩子:[
    {id:9},
    {id:10,孩子:[
      {id:11},
      {id:12},
      {id:13}
    ]}
  ]},
  {id:4},
  {id:5},
  {id:6,孩子:[
    {id:14}
  ]}
];

函数调用看起来像这样:

retrieveObjectById(10, 层次结构);
// => {id: 10, children: [...]}

我尝试使用 Array.filter 编写一个函数,该函数在遇到时会在元素的子级上递归调用,但它也会返回祖先。

4

1 回答 1

3

解决这些问题的想法通常是使用这样的递归函数:

function deepFind(obj, id) {
    if (obj.id==id) return obj;
    if (obj.children) {
       for (var i=0; i<obj.children.length; i++) {
           var o = deepFind(obj.children[i], id);
           if (o) return o;
       }
    }
}

由于您的根级别对象的结构不同,您可以循环hierarchy或使其相似:

var myObject = deepFind({children:hierarchy}, 10);

示范

于 2013-05-10T17:08:42.567 回答