Скажите, что я хочу получить a.b.c.d
, и я не уверен, есть ли b
или c
. 'наивное' чек будет:Есть ли собственный способ проанализировать объект JavaScript?
if (a.b && a.b.c && a.b.c.d == 5) doSomething(a.b.c.d);
Я думал над этим и написал эту функцию, которая улучшает это:
Object.prototype.parse = function (keys, def) {
return keys.split('.').reduce(function (prev, curr) {
if (prev) {
return prev[curr];
}
}, this) || def;
};
И вы бы использовать его как это:
var a = {
b: {
c: {
d: 5
}
}
};
console.log(a.parse('b.c.d', 3)); // If b, c or d are undefined return 3
Но мне интересно, не хватает ли я лучшего, родного способа добиться этого, вместо того, чтобы добавлять эту функцию в проекты.
Спасибо!
Вы также можете просто поместить обработчик исключений вокруг него и просто получить доступ к 'var x = a.b.c.d'. Он либо преуспеет, либо выдает исключение, либо возвращает 'undefined' (если отсутствует только' d'). – jfriend00
Для этого есть библиотека под названием '' dotty' '(https://github.com/deoxxa/dotty). – Paul
@ jfriend00 Решение try..catch значительно медленнее, поскольку оно отключает оптимизацию интерпретатора – Ben