2014-06-20 33 views
0

首先看到JSON看起來應該像需要理解JavaScript數組,對象和屬性

[ 
    {"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;

Sup提出國名是「美國國旗」,所以實際上商店將是map['united state']=country這是什麼意思?

即使在保存代碼map{}訪問後像

var selectedShortCode = map[item].ShortCode; 

如何地圖能有像ShortCode的屬性?

所以請詳細討論這種編碼技術,並幫助我以更多的例子來了解上述代碼。謝謝

+1

歡迎來到** async **的精彩世界!你不能那樣做。 – SLaks

+0

您正在將一個對象上的索引(國家名稱)設置爲等於包含國家/地區名稱的對象。所以'console.log(map ['United States']。Name)'會輸出'United States'。 – Jasper

+0

@SLaks爲什麼不呢?由於缺乏壓痕而被誤導? – CupawnTae

回答

0

data$.post電話是:

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

看看在jQuery的.each function documentation

它基本上可以如下改寫:

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),分爲兩個不同的對象。 countries可用於輕鬆遍歷map,但並不需要它。

編輯:

var country = data[0]; 
// country = { ShortCode: "US", Name: "United States" }; 
map[country.Name] = country; 
// map["United States"] = { ShortCode: "US", Name: "United States" }; 

所以以後可以採取map["United States"],它會回報你一個對象{ ShortCode: "US", Name: "United States" },那麼你可以簡單地訪問它的屬性ShortCode,如果你想。

請注意,JavaScript中的所有變量均通過引用傳遞,並且​​與myObject.someProperty完全相同。

+0

但是我們怎樣才能像這樣訪問map [item] .ShortCode?這裏使用了ShortCode屬性?請附帶一些示例代碼來了解此動態屬性?感謝您的回覆。 – Thomas

+0

已編輯。希望它能幫助你理解。 –

1

你的映射是一個對象字面量也被稱爲散列或字典或其他語言的關係數組在這種情況下基本上與一個值(任何)關聯的鍵(Strin)與國家實際對象爲什麼

後您的地圖的地圖結構[country.Name] =國家業務將 { 「美國」:{ 「簡碼」: 「美國」, 「姓名」: 「美國」}, 「加拿大「:{」ShortCode「:」CA「,」Name「:」Canada「}, 」安提瓜和/或巴布達「:{」ShortCode「:」AG「,」Name「 } }

然後你做

map["United States"] 

{ 「簡碼」: 「美國」, 「姓名」: 「美國」}

+0

但我們如何以這種方式訪問​​地圖[item] .Sortort?這裏使用了ShortCode屬性?請附帶一些示例代碼來了解此動態屬性?感謝您的回覆。 – Thomas

+0

多數民衆贊成什麼在使用地圖[項目]答案寫作是與使用地圖[「美國」]相同,如果項目==「美國」地圖[「美國」]是一個對象包含屬性ShortCode和名稱因此map [「United States」]。ShortCode是「US」。 –

相關問題