2013-01-22 52 views
0

我有一個Javascript對象,如果postsome未定義,我正努力檢查循環。如何檢查一個嵌套的對象屬性是否在Javascript中未定義?

這是我的目標:

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它的工作原理,但我通過值需要循環(「指數A」和「indexAB」 instea)。

問:
有什麼辦法來取代.indexAB[0]一個變量?如果是這樣,怎麼樣?

謝謝!

+0

'var prop ='indexAB';索引[i] [道具]'......這已被問過很多次了。 – duri

+0

讓我試試。我簡直不敢相信那麼簡單...... – frequent

回答

0

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

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

支架符號和點符號是可以互換的,所以這兩條線是相同的:

indices.foo 
indices["foo"] 

如果你需要使用一個變量,但是,indices.varName將轉化爲indices["varName"],所以你必須使用支架表示法來確保它使用變量值而不是變量名作爲字符串。

相關問題