需要了解JavaScript数组、对象和属性

需要了解JavaScript数组、对象和属性,javascript,jquery,Javascript,Jquery,首先看看JSON应该是什么样子 [ {"ShortCode":"US","Name":"United States"}, {"ShortCode":"CA","Name":"Canada"}, {"ShortCode":"AG","Name":"Antigua and/or Barbuda"} ] 代码: var countries = []; map = {}; // This is going to make an HTTP post request to the

首先看看JSON应该是什么样子

[
    {"ShortCode":"US","Name":"United States"},
    {"ShortCode":"CA","Name":"Canada"},
    {"ShortCode":"AG","Name":"Antigua and/or Barbuda"}
]
代码:

var countries = [];
map = {};

// This is going to make an HTTP post request to the controller
return $.post('/Client/CountryLookup', { query: query }, function (data) {
    // Loop through and push to the array
    $.each(data, function (i, country) {
    map[country.Name] = country;
    countries.push(country.Name);
});
$post()
将返回上述json&我需要在每个循环中解析json 但是我不明白地图对象这一行将存储什么
map[country.Name]=country

假设国家名称是“美国”,那么实际存储将是
map['united state']=country
这是什么意思

即使在save code
map{}
access中,也可以像

var selectedShortCode = map[item].ShortCode;
map如何具有类似于
ShortCode
的属性


因此,请详细讨论这种类型的编码技术,并通过几个示例帮助我理解上述代码。感谢

您的映射是一个对象文字定义,在其他语言中也称为哈希、字典或关系数组。基本上,它将键(Strin)与值(任何内容)关联。在这种情况下,将国家名称与实际的国家对象关联起来,这就是原因

地图[country.Name]=国家/地区操作后的地图结构为 { “美国”:{“快捷码”:“美国”,“名称”:“美国”}, “加拿大”:{“快捷码”:“CA”,“名称”:“加拿大”}, “安提瓜和/或巴布达”:{“快捷码”:“AG”,“名称”:“安提瓜和/或巴布达”} }

那么当你这么做的时候

map["United States"]
你得到


{“快捷码”:“美国”、“姓名”:“美国”}

您的
数据
$之后。post
调用将是:

data = 
[
    { ShortCode: "US", Name: "United States" },
    { ShortCode: "CA", Name: "Canada" },
    { ShortCode: "AG", Name: "Antigua and/or Barbuda" }
];
看看jQuery的

基本上可以改写如下:

for(var i in data)
{
    var country = data[i];
    map[country.Name] = country;
    countries.push(country.Name);
}
因此,你最终会:

map =
{
    "United States": { ShortCode: "US", Name: "United States" },
    "Canada": { ShortCode: "CA", Name: "Canada" },
    "Antigua and/or Barbuda": { ShortCode: "AG", Name: "Antigua and/or Barbuda" }
};

countries = [ "United States", "Canada", "Antigua and/or Barbuda" ];
因此,您的代码解析json,并在两个不同的对象中输出存在的所有国家(
countries
)以及与之相关的所有数据(
map
)<代码>国家
可用于通过
地图
轻松地进行分类,但没有实际需要

编辑:

因此,您可以稍后使用
map[“United States”]
,它将返回一个对象
{ShortCode:“US”,Name:“United States”}
,如果您愿意,您只需访问它的属性
ShortCode


请注意,JavaScript中的所有变量都是通过引用传递的,
myObject[“someProperty”]
myObject.someProperty

欢迎来到奇妙的异步世界!您不能这样做。您正在将对象的索引(国家名称)设置为与包含国家名称的对象相等。所以
console.log(map['United'].Name)
将输出
United
@SLaks为什么不呢?被缩进不足误导?@CupawnTae:他试图在回调后访问
map
。@SLaks是可能的,但这从问题上看并不明显-这取决于他如何使用函数的返回值-返回值将是一个承诺,如果他将代码放入
Promise.done()
中,它就会正常工作。不过这一点很好!但是我们怎样才能像这样访问map[item].ShortCode?这里如何使用ShortCode属性?请附带一些示例代码以了解此动态属性?感谢您的回复。这就是答案中所写的内容使用map[item]与使用map[“United States”]是一样的,如果item==“United States”map[“United States”]是一个包含属性快捷码和名称的对象,因此map[“United States”]。快捷码是“US”。但是我们如何才能像这样访问map[item]。快捷码?这里如何使用ShortCode属性?请附带一些示例代码以了解此动态属性?谢谢你的回复。希望它能帮助你理解。
var country = data[0];
// country = { ShortCode: "US", Name: "United States" };
map[country.Name] = country;
// map["United States"] = { ShortCode: "US", Name: "United States" };