javascript移动json对象如何判断元素是否存在

时间:2012-08-08 15:17:56

标签: javascript json

我正在迭代一个json对象,由于一个额外的元素而失败。

见下面的代码

{
"rootLayout":"main",
"layoutDescriptions":[
      {
        "type":"Panel",
        "label":"Repeating Groups By Subform",
        "layout":"SimpleForm",
        "content":[
          { "type":"label", "constraint":"newline", "text":"Contacts" },
          { "type":"repeatableGroup", "property":"contacts", "contentRef":"ContactSubForm" }
        ]
      },
      {
        "type":"Panel",
        "label":"",
        "container" : {
          "type":"Panel",
          "layout":"SimpleForm",
          "content":[
            { "type":"label", "constraint":"newline", "text":"Contact Name" },
            { "type":"ListView", "property":"contactName", "listProps":["contactName","telephone","email"] }
          ]
        }
      },

它在数组中的第二个元素上失败我使用以下内容来获取结果

data.layoutDescriptions[0].container.content[i].content

我知道它停止了,因为

data.layoutDescriptions[0].container.content[1].content

预计

data.layoutDescriptions[0].container.content[1].container.content

所以我的问题是如何说容器是否存在这样做呢。

我正在尝试这一点,但这不起作用。

    var contentObjects = data.layoutDescriptions[0].container.content[1].content;
if(contentObjects.container){
                 alert("container exists");
                 }
                         else{
                  alert("nope");
                  }

感谢。

2 个答案:

答案 0 :(得分:1)

问题是数组layoutDescriptions内的每个对象都不具有属性container。当您遍历第一个对象时,它会查找container,找不到任何内容,然后在content上搜索undefined,从而引发错误。

此外,在data.layoutDescriptions[0].container.content[1]内,您没有content属性。 contentObjects设置为undefined,因此contentObjects.container将失败。

答案 1 :(得分:1)

使用hasOwnProperty检查对象是否存在自己的属性:

 var contentObjects = data.layoutDescriptions[0].container.content[1];
 if(contentObjects.hasOwnProperty('container'){
     alert("container exists");
 }
 else{
     alert("nope");
 }