Как достать значение из вложенных объектов, имея массив ключей?

Имеется задача:
Реализуйте функцию getIn, которая извлекает из объекта (который может быть любой глубины вложенности) значение по указанным ключам. Аргументы:

Исходный объект
Массив ключей, по которым ведется поиск значения
В случае, когда добраться до значения невозможно, возвращается null.

Примеры:
const data = {
  user: 'ubuntu',
  hosts: {
    0: {
      name: 'web1',
    },
    1: {
      name: 'web2',
      null: 3,
    },
  },
};

getIn(data, ['undefined']);        // null
getIn(data, ['user']);             // 'ubuntu'
getIn(data, ['user', 'ubuntu']);   // null
getIn(data, ['hosts', 1, 'name']); // 'web2'
getIn(data, ['hosts', 0]);         // { name: 'web1' }
getIn(data, ['hosts', 1, null]);   // 3


Решение:
https://repl.it/repls/AttentiveBusyPetabyte?timeTo...
И я хочу, чтобы в result по итогу была эта цепочка:
// result = data['hosts'][1]['name']; // 'web2'

Подскажите пожалуйста, как это сделать?
  • Вопрос задан
  • 3675 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const getNested = (obj, keys) => keys.reduce((p, c) => p?.hasOwnProperty(c) ? p[c] : null, obj);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@sabir01
export default function findKey(obj, keys) {
let result = obj;
for (const key of keys) {
if (Object.hasOwn(result, key) === false) {
return null;
} else {
result = result[key];
}
} return result;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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