Javascript 在嵌套js对象中访问属性而不知道其路径的一种方法

Javascript 在嵌套js对象中访问属性而不知道其路径的一种方法,javascript,object,nested-properties,Javascript,Object,Nested Properties,有没有一种方法可以在不知道对象路径的情况下访问对象中的嵌套属性? 例如,我可以有这样的东西 let test1 = { location: { state: { className: 'myCalss' } } }; let test2 = { params: { className: 'myCalss' } }; 是否有简洁的方法“提取”类名称属性? 我有一个解决方案,但它非常难看,它只解释了这两种情况,我想知道是否有更灵活的方法可以做当然。

有没有一种方法可以在不知道对象路径的情况下访问对象中的嵌套属性? 例如,我可以有这样的东西

let test1 = {
  location: {
    state: {
     className: 'myCalss'
    }
 }
};

let test2 = {
  params: {
    className: 'myCalss'
  }
};
是否有简洁的方法“提取”类名称属性?
我有一个解决方案,但它非常难看,它只解释了这两种情况,我想知道是否有更灵活的方法可以做

当然。试试这个。它递归地迭代对象并返回第一个匹配项。您可以根据需要将
for
循环配置为匹配全部或最后一个循环

让test1={
地点:{
声明:{
类名:“myCalss”
}
}
};
设test2={
参数:{
类名:“myCalss”
}
};
函数getClassName(obj){
if(对象的类型===“对象”&&“类名称”在对象中){
返回obj.className
}
常量键=对象键(obj)
for(设i=0;ilog(getClassName(test1),getClassName(test2))
当然。试试这个。它递归地迭代对象并返回第一个匹配项。您可以根据需要将
for
循环配置为匹配全部或最后一个循环

让test1={
地点:{
声明:{
类名:“myCalss”
}
}
};
设test2={
参数:{
类名:“myCalss”
}
};
函数getClassName(obj){
if(对象的类型===“对象”&&“类名称”在对象中){
返回obj.className
}
常量键=对象键(obj)
for(设i=0;ilog(getClassName(test1)、getClassName(test2))
下面是一种创建嵌套属性getter的优雅方法:

const getProperty=property=>{
常量getter=o=>{
if(o&&typeof o==='object'){
返回Object.entries(o)
.map(([key,value])=>key==property?value:getter(value))
.filter(布尔值)
.shift()
}
}
回程吸气剂
}
常数test1={
地点:{
声明:{
类名:“test1”
}
}
}
常数test2={
参数:{
类名:“test2”
}
}
常量test3={}
常量getClassName=getProperty('className')
log(getClassName(test1))
log(getClassName(test2))

log(getClassName(test3))
这里有一种创建嵌套属性getter的优雅方法:

const getProperty=property=>{
常量getter=o=>{
if(o&&typeof o==='object'){
返回Object.entries(o)
.map(([key,value])=>key==property?value:getter(value))
.filter(布尔值)
.shift()
}
}
回程吸气剂
}
常数test1={
地点:{
声明:{
类名:“test1”
}
}
}
常数test2={
参数:{
类名:“test2”
}
}
常量test3={}
常量getClassName=getProperty('className')
log(getClassName(test1))
log(getClassName(test2))

console.log(getClassName(test3))
递归迭代所有对象属性实际上是你唯一能做的事情。理论上,你可以做
JSON.stringify()
,并构建一个正则表达式来完成你要找的事情。@theGleep如果你将这样的代码提交到我必须使用的存储库中,我会追捕你,杀了你;)@乔治·杰普蒂——当然。我可能活该。:)递归迭代所有对象属性确实是你唯一能做的事情。理论上,你可以做
JSON.stringify()
,并构建一个正则表达式来完成你要找的事情。@theGleep如果你将这样的代码提交到我必须使用的存储库中,我会找到你并杀死你;)@乔治·杰普蒂——当然。我可能活该。:)