如何使用JavaScript变量提取JSON字符串?

时间:2014-09-10 15:53:03

标签: javascript jquery json

我目前正在尝试使用我获取的dial_code作为变量来检索相应的name

该应用程序使用世界地图。当用户在特定国家/地区上空悬停时,使用' 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);

此代码无法正常运行。 dialCodes[0][countryName].dial_code是导致错误的部分,但我不确定如何正确引用相应的键/值对

3 个答案:

答案 0 :(得分: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 + ')');

如果您浏览support Array.prototype.filter

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

答案 1 :(得分:3)

如果您可以控制它,我建议您将对象更像字典,例如,如果您总是通过代码(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;

答案 2 :(得分:0)

由于它是一个数组,您可以使用filter来提取所需的数据。

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

getData('code', 'CN').dial_code; // +86