Задать вопрос
Mestniydevil
@Mestniydevil

Как проверить, есть ли свойство у вложенного объекта?

Как проверить есть ли свойство у объекта?

var id = e.path[1].attributes.uid.textContent;

Надо проверить, есть ли свойство. Если нету, то return false, а то в консоль ошибку кидает. Как от неё избавится? По тому как есть такие же объекты, но без данного свойство.
  • Вопрос задан
  • 169 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
Сделаем функцию для извлечения вложенного значения - принимает корневой объект и ключи:

const getNested = (root, ...keys) => keys
  .flat(Infinity)
  .flatMap(n => typeof n === 'string' ? n.split('.') : n)
  .reduce((p, c) => p != null ? p[c] : void 0, root);

Ключи могут быть представлены различными способами - единое значение (типа путь), несколько значений (каждое передаётся отдельным аргументом), массивы (включая вложенные):

const id = getNested(e, 'path.1.attributes.uid.textContent');
// или
const id = getNested(e, 'path', 1, 'attributes', 'uid', 'textContent');
// или
const id = getNested(e, 'path.1', [ 'attributes', [ 'uid' ] ], 'textContent');

Или есть такая штука (UPD. Теперь и браузерами поддерживается):

const id = e?.path?.[1]?.attributes?.uid?.textContent;
Ответ написан
Комментировать
Комментировать
monochromer
@monochromer
DIVeloper
Эта называется в программировании Null Safe.
Пример кода, как сделать:
var id = e && e.path && e.path.length > 0 &&  e.path[1] && ... false
// ну вы поняли

У lodash есть метода для этого - https://lodash.com/docs/4.17.11#get
Статьи на тему:
- https://dev.to/pichardoj/optional-null-safe-in-jav...
- https://dev.to/pichardoj/optional-null-safe-in-jav...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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