Рекурсия, многомерный объект помогите как решить задачу
Напишите функцию, которая принимает первым параметром объект, вторым - массив из цепочки свойств, по которому нужно пройти, чтобы получить значение.
Если какое-то из свойств не найдено - функция возвращает undefined
const obj = {
a: {
b: {
c: {
d: 'Привет!'
}
}
}
}
function optionalChaining (obj, chain) {
//code here
}
optionalChaining(obj, ["a", "b", "c", "d"]) // Привет
Ответы (2 шт):
Автор решения: Grundy
→ Ссылка
Задачу можно свести к следующим действиям:
- если нет текущего объекта - возвращаем undefined
- если в пути только один элемент - возвращаем значение по указанному свойству
- вызываем рекурсивно функцию, передавая в качестве первого параметра значение свойства, а в качестве второго - массив без первого элемента.
Например:
const obj = {
a: {
b: {
c: {
d: 'Привет!'
}
}
}
}
console.log(optionalChaining(obj, ["a", "b", "c", "d"])); // Привет
function optionalChaining(o, path) {
if (!o) return undefined;
if (path.length == 1) return o[path[0]];
return optionalChaining(o[path[0]], path.slice(1));
}
Автор решения: Igor
→ Ссылка
function optionalChaining (obj, chain) {
var i = 0;
while (typeof obj != 'undefined' && i < chain.length)
obj = obj[chain[i++]];
return obj;
}
const obj = {
a: {
b: {
c: {
d: 'Привет!'
}
}
}
};
console.log(optionalChaining(obj, ["a", "b", "c", "d"]));
console.log(optionalChaining(obj, ["a", "b", "c"]));
console.log(optionalChaining(obj, ["a", "b", "e"]));