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;
}
}
}
您应该包括您迄今为止尝试过的内容。