Вы можете создать повторно используемую функцию get
, используя Array.reduce()
.Параметры функции - это путь, объект и defaultValue (по умолчанию defaultValue
равно undefined
).Он будет перебирать путь и попытаться извлечь значение, в случае неудачи он вернет defaultValue
:
const get = (path, obj, defaultValue) => obj ?
path.reduce((r, k) => r && typeof r === 'object' ? r[k] : defaultValue, obj)
:
defaultValue;
if(get(['attributes', 'email'], null) === 'test@test.com') { console.log(1) }
if(get(['attributes', 'email'], {}) === 'test@test.com') { console.log(2) }
if(get(['attributes', 'email'], { attributes: {} }) === 'test@test.com') { console.log(3) }
if(get(['attributes', 'email'], { attributes: { email: 'test@test.com' } }) === 'test@test.com') { console.log(4) }
Имеется предложение на этапе TC39, которое называется "Необязательная цепочка для JavaScript" .Если он перейдет на язык, он добавит дополнительный оператор цепочки - ?
.Теперь, если attributes
не существует, он вернет undefined
.
Пример: obj.attributes? .Email
Сегодня его можно использовать через плагин babel .