Проверьте, существуют ли ключи/узлы JSON

Можно думать о статических методах и нестатических методах класса, как являющегося различными интерфейсами. Когда названо, статические методы разрешают к одиночному элементу статический объект класса, и нестатические методы решают к экземпляру класса, с которым Вы имеете дело. Так, при использовании статических и нестатических методов в интерфейсе Вы эффективно объявили бы два интерфейса, когда действительно мы хотим, чтобы интерфейсы использовались для доступа к одной связной вещи.

15
задан RedBlueThing 15 July 2009 в 04:12
поделиться

3 ответа

Alternatively, you could make a function, that gives you defaults:

function valueOrDefault(val, def) {
    if (def == undefined) def = "";
    return val == undefined ? def : val;
}

And then use it like this:

var place = response.Placemark[0];
var state = valueOrDefault(place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName);
var city  = valueOrDefault(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName);

Personally, I think it's a little nicer to write, than p00ya's proposal, although it's a little hacky fiddling around in undefined objects ... one could maybe change it to this:

function drill(p, a) {
 a = a.split(".");//add this
 for (i in a) {
  var key = a[i];
  if (p[key] == null)
    return '';
  p = p[key];
 }
 return p;
}
var obj = {foo:{bar:{baz:"quux"}}};
var s = drill(obj, "foo.bar.baz"));//and you can use a simple property chain
9
ответ дан 1 December 2019 в 04:27
поделиться

Вы можете использовать функцию, которая "детализирует" все эти уровни вложенности, по умолчанию выбирая пустую строку, если она не может продвинуться так далеко.

function drill(p, a) {
 for (i in a) {
  var key = a[i];
  if (p[key] == null)
    return '';
  p = p[key];
 }
 return p;
}
var obj = {foo:{bar:{baz:"quux"}}};
var s = drill(obj, ["foo", "bar", "baz"]));
3
ответ дан 1 December 2019 в 04:27
поделиться

Вы смотрите только на первый результат, который дает вам геокодер:

var place = response.Placemark[0];

getLocations () возвращает список из нескольких результатов. Если у первого его нет, то почти наверняка будет один из следующих результатов.

0
ответ дан 1 December 2019 в 04:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: