#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 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 в этой строке map[country.Name] = country;
Предположим, название страны — «united state», так что на самом деле хранилище будет map['united state']=country
, что это значит?
Даже при сохранении кода map{}
доступ позже, как
var selectedShortCode = map[item].ShortCode;
Как map может иметь свойство like ShortCode
??
Поэтому, пожалуйста, подробно обсудите этот тип техники кодирования и помогите мне понять приведенный выше код с помощью еще нескольких примеров. Спасибо
Комментарии:
1. Добро пожаловать в удивительный мир асинхронности ! Вы не можете этого сделать.
2. Вы устанавливаете индекс (название страны) для объекта равным объекту, содержащему название страны. Так
console.log(map['United States'].Name)
будет выводитьсяUnited States
.3. @SLaks почему бы и нет? Введен в заблуждение отсутствием отступов?
4. @CupawnTae: он пытается получить доступ
map
после обратного вызова.5. @SLaks возможно, но это не очевидно из вопроса — это зависит от того, как он использует возвращаемое значение из своей функции — возвращаемое значение будет обещанием, и если он вставит свой код,
promise.done()
он будет работать просто отлично. Хороший момент, хотя!
Ответ №1:
ваша карта — это литерал объекта, определенный также как хэш, словарь или реляционный массив на других языках, который в основном связывает ключ (Strin) со значением (любым), в данном случае связывает названия стран с фактическим объектом country вот почему
структура карты после вашей карты [country.Name ] = операции в стране будут { «Соединенные Штаты»:{«Короткий код»: «США», «Название»: «Соединенные Штаты»}, «Канада»:{«Короткий код»: «КАЛИФОРНИЯ», «Название»:»Канада»}, «Антигуа и / или Барбуда»: {«Короткий код»:»AG»,»Имя»:»Антигуа и / или Барбуда»} }
затем, когда вы делаете
map["United States"]
вы получаете
{«ShortCode»:»US»,»Name»: «Соединенные Штаты»}
Комментарии:
1. но как мы можем получить доступ таким образом, map[item] . Короткий код? как здесь используется свойство ShortCode? пожалуйста, предоставьте какой-нибудь пример кода, чтобы понять это динамическое свойство? спасибо за ответ.
2. то, что написано в ответе с использованием map[item], совпадает с использованием map[«Соединенные Штаты»], если item==»Соединенные Штаты» map[«Соединенные Штаты»] является объектом, содержащим короткий код свойств и название, следовательно, map[«Соединенные Штаты»] . Короткий код — это «МЫ».
Ответ №2:
Ваш data
после $.post
вызова будет:
data =
[
{ ShortCode: "US", Name: "United States" },
{ ShortCode: "CA", Name: "Canada" },
{ ShortCode: "AG", Name: "Antigua and/or Barbuda" }
];
Взгляните на .each
документацию по функциям 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
) в двух разных объектах. 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"]
точно так же, как myObject.someProperty
.
Комментарии:
1. но как мы можем получить доступ таким образом, map[item] . Короткий код? как здесь используется свойство ShortCode? пожалуйста, предоставьте какой-нибудь пример кода, чтобы понять это динамическое свойство? спасибо за ответ.
2. Отредактировано. Надеюсь, это поможет вам понять.