在JavaScript中,我正在构建一个对象。在循环中我需要检查根对象是否已经包含子对象,如果没有,我需要添加它。
childObjectName = this.name.split('.')[1];
现在,我如何检查我的根对象myObject
是否已经包含childObjectName
中包含的名称的子项?
修改
我想也许我的OP不是很清楚。对不起。
让我们说childObjectName
最终的值为#34; ThisName"。现在,我想查看myObject
是否已经包含名为" ThisName"的子对象。因为这是一个循环,我需要能够检查任何名称。
我希望这更有意义吗?
编辑2:
{
"myObject":{
"CampaignType":{
"Exclusive":25,
"Shared":6
}
}
}
好的,现在,让我们说var childObjectName
等于" CampaignType"。在这种情况下,我需要在looing时获取TRUE以查看myObject
是否包含childObjectName
。
但是,让我们说childObjectName
等于" FooBar"。在这种情况下,我需要得到FALSE。
答案 0 :(得分:2)
像这样的东西。如果对象中不存在属性,则返回undefined
。因此,您基本上需要检查对象上是否存在属性。
if(! myObject[childObjectName])
{
myObject.childObjectName = this.name.split('.')[1];
}
答案 1 :(得分:1)
您应该使用hasOwnProperty
。它与所有浏览器兼容,即使属性具有虚假值,也可以使用,例如null
,false
等。
var myObject = {
propOne: "hello world",
propTwo: false,
CampaignType: {
"Exclusive": 25,
"Shared": 6
}
};
checkForPropertyName("prop" + "One");
checkForPropertyName("propTwo");
checkForPropertyName("propThree");
checkForPropertyName("CampaignType");
function checkForPropertyName(childObjectName) {
if (myObject.hasOwnProperty(childObjectName)) {
console.log('myObject has property "' + childObjectName + '"');
} else {
console.log('myObject does NOT have property "' + childObjectName + '"');
}
}

答案 2 :(得分:0)
childObjectName = childObjectName || this.name.split('.')[1];
如果属性存在(并且其值是真实的),则其值不会更改,否则将为其赋值。这可以应用于root的属性。
请注意,如果属性存在并且它具有假值,则这可能不起作用。
更新编辑: 如果您需要为任意属性设置此代码,并且您的代码在根级别运行,请使用 this 来引用root:
Object.getOwnPropertyNames(this); // Now you have an array of properties set on root.
答案 3 :(得分:0)
var childObjectName = this.name.split('.')[1];
if(myobject[childobjectName]){
//the child object is present
}else{
//the child object is not present
}