У меня есть коллекция разрозненных, сложных объектов JSON из базы данных CouchDB. Каждый содержит много уровней вложенных свойств - например,
tps_report.personnel_info.productivity.units_sold = 8
Я хочу перебрать эти объекты и поработать с ними: например,
// writes units sold from each TPS report:
for (i in tpsReports) {
if (tpsReports[i].personnel_info.productivity.units_sold < 10) {
fireEmployee();
}
}
Проблема в том, что во многих отчетах TPS не установлены все эти свойства. Поэтому, если я попробую это сделать, я получу сообщение об ошибке, когда в первый раз цикл попадет в отчет без свойстваperson_info и, таким образом, попытается найти свойство производительности «undefined». Я бы предпочел, чтобы условное условие просто пропустило его и продолжило.
Я вижу два пути решения этой проблемы, которые кажутся мне безобразными
- проверка для каждого свойства отдельно с вложенными условными выражениями
- заключить строку в блок try / catch, чтобы перехватить ошибку и проигнорировать ее
Что бы я предпочел, это было бы что-то вроде PHP-функции isset (), которая не будет выдавать ошибку независимо от того, что вы ее кормите - она просто скажет вам, существует ли конкретная переменная, которую вы ищете не. Итак, вроде
// writes units sold from each TPS report:
for (i in tpsReports) {
if (isset(tpsReports[i].personnel_info.productivity.units_sold)){
if (tpsReports[i].personnel_info.productivity.units_sold < 10) {
fireEmployee();
}
}
}
Есть мысли?