@qovalenko

Как проверить наличие вложенного ключа в объекте и если он существует вернуть значение?

Существует объект:
let obj =  {
"viewport" : {
               "key" : {
                  "lat" : 47,
                  "lng" : 39
               },
               "southwest" : {
                  "lat" : 47,
                  "lng" : 39
               },
               "one" : {
                  "keygen" : 47,
                  "lng" : 39
               }
            }
}

Мне нужно проверить есть ли у него ключ keygen, и если есть то вернуть его значение obj.hasOwnProperty('lat'), ищет только по первому уровню, а мне нужно углубиться. Спасибо!
  • Вопрос задан
  • 889 просмотров
Решения вопроса 1
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
let obj =  {
	"viewport" : {
     "key" : {
        "lat" : 47,
        "lng" : 39
     },
     "southwest" : {
        "lat" : 47,
        "lng" : 39
     },
     "one" : {
        "keygen" : 47,
        "lng" : 39
     }
  }
}

function deepSearch (object, key, predicate) {
  if (object.hasOwnProperty(key)) {
    return object
  }

  for (let i = 0; i < Object.keys(object).length; i++) {
    if (typeof object[Object.keys(object)[i]] === 'object') {
      let o = deepSearch(object[Object.keys(object)[i]], key)
      if (o != null) return o
    }
  }

  return null
}

const result = deepSearch(obj, 'keygen');

console.log(result); // {keygen: 47, lng: 39}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Также можно использовать оператор опциональной последовательности (optional chaining), доступный начиная с ECMAScript 2020:

const obj = {
  a: {
    b: {
      c: 1
    }
  }
};


Проверяем наличие ключа "c" в объекте "b", который является свойством объекта "a"

if (obj?.a?.b?.c) {
  console.log('Ключ "c" существует');
} else {
  console.log('Ключ "c" не существует');
}


В этом случае оператор "?" проверяет наличие свойств "a", "b" и "c" в объекте, и если хотя бы один из них отсутствует, то результатом выражения будет undefined. Если все свойства существуют, то выражение вернет значение ключа "c".
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы