从深层次结构中检索具有给定属性的对象

时间:2013-05-10 17:06:27

标签: javascript

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

var hierarchy = [
  {id: 1, children: [
    {id: 7},
    {id: 8}
  ]},
  {id: 2},
  {id: 3, children: [
    {id: 9},
    {id: 10, children: [
      {id: 11},
      {id: 12},
      {id: 13}
    ]}
  ]},
  {id: 4},
  {id: 5},
  {id: 6, children: [
    {id: 14}
  ]}
];

函数调用看起来像这样:

retrieveObjectById(10, hierarchy);
// => {id: 10, children: [...]}

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

1 个答案:

答案 0 :(得分: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);

Demonstration