Нужна помощь. Не понимаю как исправить проблему. Почему на 3-ем и 4-ом вызове функции массив из значений после 2-го прохода превращается в undefined?
Напишите функцию, которая принимает первым параметром объект, вторым - массив из цепочки свойств, по которому нужно пройти, чтобы получить значение.
Если какое-то из свойств не найдено - функция возвращает undefined.
function optionalChaining(obj, chain) {
if (Object.keys(obj) == chain[0] && chain.length == 1) {
return obj[chain[0]]
} else if (chain.length != 1) {
return optionalChaining(obj[chain[0]], chain.slice(1))
} else
return undefined
}
const obj = { a: { b: { c: { d: 'Привет!' } } } }
const obj2 = { a: { b: { name: 'Pavel' } } }
console.log(optionalChaining(obj2, ["a", "b", "name"])) // Pavel
console.log(optionalChaining(obj, ["a", "b", "c", "name"])) // undefined
console.log(optionalChaining(obj, ["z", "c", "d"])) // undefined
console.log(optionalChaining(obj2, ["z", "c", "d"])) // undefined
Ответы (1 шт):
Автор решения: Павел Артамонов
→ Ссылка
Object.keys(obj) == chain[0] неподходящее сравнение, правильнее obj.hasOwnProperty(chain[0]).
Не было проверки на undefined с возвратом его же самого.
Правильный код:
if (obj.hasOwnProperty(chain[0]) && chain.length == 1) {
return obj[chain[0]]
}
else if (!obj.hasOwnProperty(chain[0])) {
return undefined
}
else (chain.length != 1)
return optionalChaining(obj[chain[0]], chain.slice(1))
}