Цикл по многомерному объекту JavaScript
Есть задача:
const get = (obj, path) => {
};
console.log(get({ a: 1 }, "a"));// === 1 true
console.log(get({ a: { b: 1 } }, "a.b")); // === 1 true
console.log(get({ a: { b: 1 } }, "a.c")); // === undefined
console.log(get({ a: { b: { c: 1 } } }, "a.c.b") ); // === null
console.log(get({ a: { b: { c: 1 } } }, "a.b.c") ); // === true
Нужно написать функцию get, которая будет принимать объект и путь и в случае если все передано верно возвращать true, иначе false, если такого пути нет undefined, а если в путь передан не в той последовательности - null. Проблема в том, что здесь вложенные друг в друга объекты, если их определенное количество (напр. 3), то я эту задачу решила вложенными циклами (хоть громоздко,но работает), но эта функция должна работать с любым уровнем вложенных объектов. Спасибо!
Ответы (1 шт):
Автор решения: Alexandr
→ Ссылка
Может можно и проще как то:
const get = (obj, path) => {
path = path.split('.');
let curObj = obj;
let pathDump = ''
for ( let i = 0 ; i < path.length ; i++){
let key = Object.keys(curObj)[0]
pathDump += key;
curObj = curObj[key];
}
return pathDump == path.join('') || (path.every(i => pathDump.includes(i)) ? null : undefined)
};
console.log('res:' , get({ a: 1 }, "a"));// === 1 true
console.log('res:' , get({ a: { b: 1 } }, "a.b")); // === 1 true
console.log('res:' , get({ a: { b: 1 } }, "a.c")); // === undefined
console.log('res:' , get({ a: { b: { c: 1 } } }, "a.c.b") ); // === null
console.log('res:' , get({ a: { b: { c: 1 } } }, "a.b.c") ); // === true