2013-04-18 143 views
0

我有一個JSON響應我收到來自看起來像下面這樣的自定義Web服務回報:JavaScript數組和對象鍵

var data = { 
    AZ:{charge:123,count:324}, 
    TN:{charge:123,count:7545}, 
    TX:{charge:165,count:345} 
} 

而且我通過使用狀態的縮寫陣列希望循環,我通過另一個json調用回來。我不需要遍歷所有狀態,只是由這個JSON調用支配的特定狀態。所以,我最終狀態的縮寫組成的數組,看起來像這樣:

var states = ["AZ","TX"]; 

然後我通過數據試圖環和拉出的充電特性,像這樣:

console.log(data[states[i]].charge); 

但是當我做這我從數據中取回一個未定義的數據。當我拿出狀態縮寫時,它就在那裏,當我在此調用之前註銷數據時,所有數據都在那裏。我可以做參考每個記錄在數據下面雖然

console.log(data["TN"].charge); 

人照顧解釋爲什麼console.log(data[states[i]].charge);但其他呢?另外我能做些什麼來糾正這個問題?

+0

顯然是因爲'data'對象中沒有名爲'states [i]'的屬性。請發佈適用於這些變量的代碼。 – VisioN

+0

對不起,我現在修好了。 –

回答

2

您正在使用AXTX作爲data的關鍵字,但它們不是字符串,它們是變量。添加引號使它們成爲字符串。

var states = ['AX','TX']; 

,並避免可能的錯誤在你的代碼,檢查是否data[states[i]]undefined試圖訪問charge屬性之前。

var stateData = data[states[i]]; 

if(!stateData) return; //or `continue` if inside a loop to skip 

console.log(stateData.charge); 
+1

然後它會是一個未定義的'AX'的例外。 – VisioN

0

如果i = 0那麼你應該得到不確定,因爲states[0] === "AX"並且在你的data沒有"AX"關鍵。如果i = 1您應該得到165

0

這可能是一個錯字,但它看起來像你的變種狀態的狀態列表是不一樣在你的數據對象的關鍵,特別是「AX」是不是在你的數據的關鍵對象的例子

0

我只是嘗試這樣做:

<script lang='javascript'> 
var data = { 
    AZ:{charge:123,count:324}, 
    TN:{charge:123,count:7545}, 
    TX:{charge:165,count:345} 
} 

var states = ['AX','TX']; 
console.log(data[states[1]].charge); 
console.log(data["TN"].charge); 

</script> 

它輸出:

165 
123 

所以,如果從一個API回來打電話叫其可能回來作爲變量,所以你得先參考它然後將它傳遞給控制檯。喜歡的東西:

var charge = data[states[i]].charge 
console.log(charge) 

您也應該檢查狀態[I]數據陣列中存在第一爲好。