为了账号安全,请及时绑定邮箱和手机立即绑定

萌新求教!javascript 怎么样才能通过value获取到key?求指导!

萌新求教!javascript 怎么样才能通过value获取到key?求指导!

拉丁的传说 2019-06-09 09:58:18
有这样一个对象,想通过nodeId获取key{childNode:{nodeId:'sid-start',childNode:{nodeId:'aaaa',conditionNodes:[{nodeId:'bbbb',childNode:{nodeId:'cccc'}},{nodeId:'dddd',}],childNode:{nodeId:'eeee',}}}}比如知道nodeId为cccc,得到childNode>childNode>conditionNodes[0]>childNode。卡了一下午了,跪求大牛们帮忙看看
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

树的遍历是编程的基本功,野路子自学出身的我只能写个蹩脚的递归给你自个琢磨改进了:
constdepth=(obj,value,path)=>{
for(letkeyinobj){
if(obj.hasOwnProperty(key)){
constcurrent=obj[key];
constsubPath=[key].concat(path);
if(currentinstanceofObject){
constsubResult=depth(current,value,subPath);
if(!!subResult.length){
returnsubResult;
}
}elseif(current===value){
returnsubPath
}else{}
}
}
return[]
};
出来的结果将会是反的,需要进行一次.reverse操作。
                            
查看完整回答
反对 回复 2019-06-09
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

想想好像除了递归,就只剩看场景取巧了。
varvalue=4;
varobj={
a:1,
b:[2,3],
c:{d:4,e:5}
};
varreg=newRegExp(`[,|{]"([^"]+?)":${value}[,|}]`);
varres=JSON.stringify(obj).match(reg);
console.log(res&&res[1]);//d
                            
查看完整回答
反对 回复 2019-06-09
  • 2 回答
  • 0 关注
  • 598 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信