2014-09-10 40 views
0

我目前正試圖通過使用我正在獲取的name作爲變量來檢索相應的dial_code如何使用JavaScript變量提取JSON字符串?

該應用程序使用世界地圖。當用戶懸停在特定的國家時,該國家使用'getRegionName'獲得。然後這被用來改變變量name。我如何使用變量name來檢索它所涉及的dial_code

JSON

var dialCodes = [ 
    {"name":"China","dial_code":"+86","code":"CN"}, 
    {"name":"Afghanistan","dial_code":"+93","code":"AF"} 
]; 

下面的代碼運行在一個國家

var countryName = map.getRegionName(code); 
label.html(name + ' (' + code.toString() + ')<br>' + dialCodes[0][countryName].dial_code); 

此代碼不能正常工作的鼠標懸停。 是導致錯誤的部分,但我不確定如何正確引用相應的鍵/值對

+0

你不能爲對象的數組。沒有鍵值對。 – webduvet 2014-09-10 15:58:10

+0

您可以將數組(您錯誤地稱爲JSON)更改爲名稱爲鍵的對象嗎? – Biffen 2014-09-10 15:59:32

回答

4

如果您必須支持舊瀏覽器: 循環訪問數組中的條目並比較給定的名稱:

var dialCode; 
for(var i = 0; i < dialCodes.length; i++) { 
    if(dialCodes[i].name === countryName) { 
     dialCode = dialCodes[i].dial_code; 
     break; 
    } 
} 
label.html(countryName + ' (' + dialCode + ')'); 

如果你的瀏覽器supportArray.prototype.filter

dialCodes.filter(function(e) { return e.name === 'China' })[0].dial_code 
+2

可以使用「break」。 – Biffen 2014-09-10 16:00:37

+0

我在Safari上遇到了兩種方法的問題。你會碰巧知道一個解決方案嗎? – 2014-09-11 09:12:03

+0

我剛剛在Safari(7.0.6)中試過了,它似乎對我很有用。你遇到什麼樣的問題? – folkol 2014-09-11 09:54:29

3

如果你擁有控制權,我建議讓您的對象更像是一本字典,例如如果y OU總是由代碼(CNAF),你可以避開,如果你沒有循環查找此:

var dialCodes = { 
    CN: { "name":"China","dial_code":"+86","code":"CN" }, 
    AF: {"name":"Afghanistan","dial_code":"+93","code":"AF"}  
}; 

var code = dialCodes.CN.dial_code; 

或者

var myCode = 'CN'; // for example 
var code = dialCodes[myCode].dial_code; 
0

因爲它是你可以用filter以提取數據的數組需要。

function getData(type, val) { 
    return dialCodes.filter(function (el) { 
    return el[type] === val; 
    })[0]; 
} 

getData('code', 'CN').dial_code; // +86 
相關問題