2017-01-23 135 views
0

在JavaScript中,我正在构建一个对象。在一个循环内,我需要检查根对象是否已经包含一个子对象,如果没有,我需要添加它。检查JavaScript对象中是否存在子对象

childObjectName = this.name.split('.')[1]; 

现在,我该如何检查,看看是否我的根对象,myObject已包含孩子用任何包含在childObjectName的名字吗?

编辑:

我想也许我的OP也不是很清楚。对于那个很抱歉。

让我们假设childObjectName最终具有“ThisName”的值。现在,我想检查并看看myObject是否已经包含名为“ThisName”的子对象。由于这是一个循环,我需要能够检查任何名称。

我希望更有意义吗?

编辑2:

{ 
    "myObject":{ 
     "CampaignType":{ 
     "Exclusive":25, 
     "Shared":6 
     } 
    } 
} 

好了,现在,让我们说了var childObjectName等于 “CampaignType”。在这种情况下,当需要查看myObject是否包含childObjectName时,我需要获得TRUE。我们假设childObjectName等于“FooBar”。在这种情况下,我需要获得FALSE。

+0

如果孩子你的意思是属性,那么' childObjectName在rootObject中。或者更确切地说,如果(rootObject [childObjectName] === this)'。 –

+1

你描述你的对象的方式有点困惑。你能提供一个示例JSON对象来显示你所指的结构吗? –

+0

当然。一秒... –

回答

2

就是这样。如果对象中不存在属性,则返回undefined。所以,你基本上需要检查属性是否存在于对象上。

if(! myObject[childObjectName]) 
{ 
    myObject.childObjectName = this.name.split('.')[1]; 
} 
+0

这不是为myObject内部的名为“childObjectName”的子对象检查,而是为称为“childObjectName”内的任何值的子对象检查? –

+0

您不能将点存取器与变量一起使用。使用括号。 –

+0

您可以使用带有属性名称的点存取器,实际上您可以使用 – Agalo

0
childObjectName = childObjectName || this.name.split('.')[1]; 

如果此属性存在(它的值是truthy)它的值不会改变,否则将被给出的值。这可以应用于根的属性。

请注意,如果该属性存在并且它具有虚假值,则这可能不起作用。

更新编辑: 如果你需要以此为任意性,您的代码运行在根级别,然后用这个指根:

Object.getOwnPropertyNames(this); // Now you have an array of properties set on root. 
+0

请参阅编辑我的OP。谢谢! –

1

您应该使用hasOwnProperty。它兼容所有浏览器,和它的作品,即使酒店有falsy值,如nullfalse

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 + '"'); 
 
    } 
 
}

+0

现在测试这个! –

0
​​
+0

这增加了这里已经没有价值的答案。 –

+0

你为什么认为@jared? –

+0

除了使用正确的访问操作符(我已经在评论中指出了一个错误),这与Agalo的答案有什么不同? –