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

Javascript 从深层层次中检索具有给定属性的对象,javascript,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
。只要给定
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: [...]} 变量层次结构=[ {id:1,儿童:[ {id:7}, {id:8} ]}, {id:2}, {id:3,儿童:[ {id:9}, {id:10,儿童:[ {id:11}, {id:12}, {id:13} ]} ]}, {id:4}, {id:5}, {id:6,儿童:[ {id:14} ]} ]; 函数调用将如下所示:

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: [...]} retrieveObjectById(10,层次结构); //=>{id:10,子项:[……]}
我尝试使用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;
       }
    }
}

您应该包括您迄今为止尝试过的内容。