假设我有一个可以有孩子的对象层次结构。所有对象都有唯一的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编写一个函数,它会在遇到元素的子元素时以递归方式调用,但它也会返回祖先。
答案 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);