Javascript 访问嵌套对象';s场

Javascript 访问嵌套对象';s场,javascript,Javascript,我想创建一个函数,在嵌套对象的任何级别切换字段值 功能切换(对象、字段){ 对象[字段]=!对象[字段]; } 但是,如果我想像这样更改嵌套对象: outer: { inner: { enable: true } } 我不能像toggle(outer,'inner.price')或toggle(outer.inner,'price')那样传递它。计算属性是否有一些技巧可以让我不解析参数字符串并递归地挖掘对象内部?在JS中,您实际上可以通过使用属性名称来访问属性,outer['

我想创建一个函数,在嵌套对象的任何级别切换字段值

功能切换(对象、字段){
对象[字段]=!对象[字段];
}
但是,如果我想像这样更改嵌套对象:

outer: {
  inner: {
    enable: true
  }
}

我不能像
toggle(outer,'inner.price')
toggle(outer.inner,'price')
那样传递它。计算属性是否有一些技巧可以让我不解析参数字符串并递归地挖掘对象内部?

在JS中,您实际上可以通过使用属性名称来访问属性,
outer['inner']
outer.inner
相同,但您不需要在“编译”时知道属性名称

您应该能够通过拆分字符串(如
outer.inner.enable)来找到递归所需的属性

让myObject={
外部:{
内部:{
启用:true
}
}
};
常量切换=(对象、路径)=>{
//获取下一个属性的名称
让[prop,…subsps]=path.split('.');
//检查要切换的属性是否在此对象上
if(subsps.length==0){
//交换所说的财产
对象[prop]=!对象[prop];
}否则{
//在子对象中切换属性
切换(对象[prop],子ps.join('.');
}
}
console.log(myObject.outer.inner.enable);//真的
切换(myObject,'outer.inner.enable');
console.log(myObject.outer.inner.enable);//错误
在这方面,没有什么能比得上洛达斯

功能切换(obj、prop){
_.set(obj,prop,!u.get(obj,prop));
}
var obj={
外部:{
内部:{
启用:true
}
}
};
切换(obj、[“外部”、“内部”、“启用”]);
控制台日志(obj);
切换(obj、[“外部”、“内部”、“启用”]);
控制台日志(obj)

创建递归函数

var外部={
内部:{
第二:{
启用:true
}
}
}
功能切换(obj,键名){
用于(obj中的var键){
if(obj.hasOwnProperty(键)&&typeofobj[keys]=“object”){
if(obj[keys][keyName]!==未定义){
obj[keys][keyName]=!obj[keys][keyName]
}否则{
切换(obj[键],键名)
}
}
}
}
切换(外部“启用”);

console.log(outer)
递归循环是您需要的。呃,
切换(outer.inner,'price')
实际上应该可以“计算属性有什么诀窍吗?”没有。您需要以这种或那种方式挖掘对象内部。@Bergi它可以工作,但我想像
切换我的对象(“第一层上的字段”)一样运行它。
切换我的对象(“第二层上的字段”)
也一样。您提供的内容将运行在所有对象键上,这对性能没有影响。