假设我有一个可以有子对象的层次结构。所有对象都有一个唯一的 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 编写一个函数,该函数会在遇到元素的子元素时递归调用,但它也会返回祖先元素。
最佳答案
解决这些问题的想法通常是使用这样的递归函数:
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);
关于javascript - 从深层层次结构中检索具有给定属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16487426/