如何在Javascript中检查嵌套对象属性是否未定义?

时间:2013-01-22 18:01:59

标签: javascript jquery object properties undefined

我有一个Javascript对象,如果postsome未定义,我正在努力检查循环。

这是我的目标:

var indices = [{
    "indexAB": [{
        "postsome": [
            "keyword_abc",
            "keyword_def"
         ]
       }]
    },{
    "indexA": [{
        "postsome": [
            "keyword_abc"
        ]
      }]
    }
 ]

问题是,我无法直接引用indexAindexABpostsome。一切都将是变数。这就是我正在尝试的:

// passed parameter
var doc._id = "postsome";

// mapping priv
// "indices": [
//    {"name":"indexA","fields":["findMeA"]},
//    {"name":"indexAB", "fields":["findMeA","findMeB"]}
//    ],

for (var i = 0, l = indices.length; i < l; i += 1) {

  var index = priv.indices[i];
      index_name = index["name"]; // indexAB or indexA

  // I can't reference indexAB directly 
  if ( indices[i].indexAB !== undefined && indices[i].indexAB.length  >  0 )          {
      console.log( indices[i].indexAB );
      console.log( indices[i].indexAB[0][doc._id] );

      if (indices[i].indexAB[0][doc._id] !== undefined) {
        console.log("gotcha");
        trigger = true;
      }
    }
}

因此,当我使用indexAB硬编码时,它可以工作,但我需要遍历值('indexA'和'indexAB'instea)。

问题:
有没有办法用变量替换.indexAB[0]?如果是这样,怎么样?

谢谢!

1 个答案:

答案 0 :(得分:0)

只需使用括号表示法,与[doc._id]完全相同。

if (indices[i][index_name] !== undefined && indices[i][index_name].length > 0)

括号表示法和点表示法是可互换的,因此这两行是等效的:

indices.foo
indices["foo"]

但是,如果需要使用变量,indices.varName将转换为indices["varName"],因此必须使用括号表示法来确保它使用变量值而不是变量名作为字符串。