Javascript 对象的对象的访问属性
具有这种形式的物体:Javascript 对象的对象的访问属性,javascript,object,ecmascript-6,key,Javascript,Object,Ecmascript 6,Key,具有这种形式的物体: myObj = { id: 1, values: { internal: { myProp1: true myProp2: true }, external: { myProp1: true myProp2: true } } }; 我希望当
myObj = {
id: 1,
values: {
internal: {
myProp1: true
myProp2: true
},
external: {
myProp1: true
myProp2: true
}
}
};
我希望当我选择一个选项时,internal
或external
能够仅为我选择的一个选项将myProp1
设置为false
在这种情况下,如果我选择internal
,对象应该如下所示:
myObj = {
id: 1,
values: {
internal: {
myProp1: false
myProp2: true
},
external: {
myProp1: true
myProp2: true
}
}
};
我试着像这样做,但我做错了:
Object.keys(myObj).forEach(element => {
if(element === "values") {
element.forEach(innerElement => {
if(innerElement === "internal") {
innerElement.myProp1= false;
}
});
}
});
有什么建议吗?您可以像访问对象属性一样访问子对象
myObj.values.internal.myProp1 = false
注意,如果链中至少有一个元素(myProp1除外)未定义,它将抛出错误
就像@titus在评论中说的那样,你也可以使用[…]
符号
myObj={
id:1,
价值观:{
内部:{
myProp1:错,
myProp2:对
},
外部:{
myProp1:没错,
myProp2:对
}
}
};
//使用基本符号
log(myObj.values.internal.myProp1)
//使用[…]符号按名称访问道具
日志(myObj[“值”][“内部”][“myProp1”])
//当prop名称位于变量中时,通常使用[…]表示法
让propName=“内部”
console.log(myObj[“values”][propName][“myProp1”])
//可以混合
console.log(myObj[“values”].internal[“myProp1”])
console.log(myObj.values[propName].myProp1)
我想这就是您想要的。您需要访问变量myObj本身
Object.keys(myObj).forEach(element=>{
if(element === "values"){
Object.keys(myObj[element]).forEach(innerElement=>{
if (innerElement === "internal"){
myObj[element][innerElement].myProp1 = false;
}
})
}
})
如果您也接受了建议,我建议您使用数组来表示集合,而不是对象。这使得代码以比循环键和值更容易的方式查找数组中的任何内容 智能数据结构和哑代码通常比另一种方式工作得更好。 从对象到集合数组的切换极大地减少了我为转换编写的代码
const集合=[
{
“id”:1,
“内部”:[
{“name”:“myProp1”,“val”:true},
{“name”:“myProp2”,“val”:true}
],
“外部”:[
{“name”:“myProp1”,“val”:true},
{“name”:“myProp2”,“val”:true}
]
},
{
“id”:2,
“内部”:[
{“name”:“myProp1”,“val”:false},
{“name”:“myProp2”,“val”:false}
],
“外部”:[
{“name”:“myProp1”,“val”:null},
{“name”:“myProp2”,“val”:null}
]
}
];
const item_1=collection.find(item=>item.id==1);
const internal_prop=item_1.internal.find(prop=>prop.name==='myProp1');
内部_prop.val=假;
控制台日志(收集)
可以访问子对象,如访问对象propmyObj.values.internal.myProp1=false
如果要使用字符串作为属性名,可以使用[…]
表示法,例如:myObj.values[innerElement].myProp1=false
。你可以找到更多的细节