Часто в ответ от удаленного вызова API, я получаю вложенные объекты:Nicer способ получить вложенные атрибуты объекта
var response = {
data : {
users : [
{
name : 'Mr. White'
}
]
}
}
Я хочу, чтобы проверить, является ли имя первого пользователя «Mr. Белый », и, естественно, хотел бы написать что-то вроде этого.
var existed = response.data.users[0].name === 'Mr. White'
Однако я не могу быть уверен, что, если все объекты присутствуют, поэтому, чтобы избежать исключения вместо этого я в конечном итоге написание:
var existed = response && response.data && response.data.users && response.data.users[0].name === 'Mr. White'
Есть ли лучше способ сделать это? Еще один уродливый вариант, который приходит на ум:
var existed = false;
try {
var existed = response.data.users[0].name === 'Mr. White';
} catch(e) { }
В дополнение к ванили JavaScript, я обычно underscore.js и JQuery доступны также.
Edit:
К сожалению, заметил, что я задал контратип javascript test for existence of nested object key.
Интересный вариант на основе этих ответов:
var existed = (((response || {}).data || {}).users || [{}])[0].name === 'Mr. White';
'try/catch' является самым чистым решением IMO. –
Вы можете рассмотреть библиотеку [dotty.js] (https://github.com/deoxxa/dotty). Это небольшая специализированная библиотека для извлечения вещей из вложенных объектов. – Paul
Dotty выглядит интересно, но если бы я читал код, я думаю, что это смущает меня больше, чтобы увидеть библиотеку, используемую для такой небольшой цели. – Bemmu