Javascript-在嵌套对象中查找对象引用的路径

Javascript-在嵌套对象中查找对象引用的路径,javascript,Javascript,如何递归搜索嵌套对象以找到我提供的对象引用的路径 我的原始对象看起来像: a = { b: [ { children: [...more objects] }, { children: [] } etc.. ], c: [ { children: [...more objects] }, { children: [] } etc.. ] } 我想调用一个函数finddepandstorepath(a,obj),它将查找对象引用并将指向它的路径存储在一个索引数组中

如何递归搜索嵌套对象以找到我提供的对象引用的路径

我的原始对象看起来像:

a = {
 b: [
  { children: [...more objects] },
  { children: [] }
  etc..
 ],
 c: [
  { children: [...more objects] },
  { children: [] }
  etc..
 ]
}
我想调用一个函数
finddepandstorepath(a,obj)
,它将查找对象引用并将指向它的路径存储在一个索引数组中,如:[b',0,1,2]

函数findPath(a,obj){
for(对象中的var key){//for对象对象中的每个key
if(obj.hasOwnProperty(key)){//如果它是一个拥有的密钥
if(a===obj[key])返回键;//如果要搜索的项位于该键,则返回该键作为路径
else if(obj[key]&&typeof obj[key]=“object”){//否则,如果此键处的项也是对象
var path=findPath(a,obj[key]);//在该对象中搜索项a
如果(path)返回key+“““+path;//如果找到,则路径为该key,后跟搜索结果
}
}
}
}
var obj={
“a”:[1,2,{“o”:5},7],
“b”:[0,[{“bb”:[0,str”]}]
};
日志(findPath(5,obj));
console.log(findPath(“str”,obj).split(“.”);//如果希望以数组形式获取路径,只需拆分findPath的结果即可,您可以使用并检查值。如果找到,则返回实际路径并停止迭代。如果没有,则检查所有可能的路径

此建议尊重数组中的数字键

函数findPath(a,obj){
功能iter(o,p){
返回Object.keys(o).some(函数(k){
结果=p.concat(数组.isArray(o)+k:k);
返回o[k]==a | | o[k]&&typeof o[k]=='object'&&iter(o[k],result);
});
}
var结果;
返回iter(obj,[])&结果| |未定义;
}
var obj={a:[1,2,{o:5},7],b:[0,[{bb:[0,“str”]}]};
console.log(findPath(5,obj));//[“a”,2,“o”]
console.log(findPath(“str”,obj));//[“b”,1,0,“bb”,1]
console.log(findPath(42,obj));//未定义

。作为控制台包装{最大高度:100%!重要;顶部:0;}
不要重新发明轮子。我们所有的数据处理需要都使用。只要你把头绕在它身上,它就会很强大。下面是你如何使用它来回答你的问题

//const objectScan=require('object-scan');
const findPath=(id,data)=>objectScan(['**'){
中止:对,
rtn:'键',
filterFn:({value})=>value==id
})(数据);
const obj={a:[1,2,{o:5},7],b:[0,[{bb:[0,'str']}]};
日志(findPath(5,obj));
//=>['a',2',o']
log(findPath('str',obj));
//=>['b',1,0',bb',1]
。作为控制台包装{最大高度:100%!重要;顶部:0}

您应该使用事件发射器编写自己的代码,它将处理混合数据,您介意详细说明一下吗?