Как сделать Flat object?
FlatObject Напишите функцию, которая возвращает новый объект, в котором все примитивные элементы вложенных объектов были рекурсивно "подняты"(подняты = из вложенного объекта перемещены в текущий) до первого уровня. CODE
Ответы (1 шт):
Данную задачу можно свести к задаче уменьшения вложенности массивов.
Для получения из объекта массива можно воспользоваться методом Object.entries
Далее пройдемся по всем элементам и если элемент является объектом - рекурсивно повторим операцию.
В итоге вместо многоуровневого объекта, получится много уровневый массив.
Для уменьшения вложенности можно воспользоваться методом .flatMap. Данный метод позволит сразу добавлять куски массива, не наращивая вложенность.
Для получения объекта из массива, можно воспользоваться методом Object.fromEntries
В итоге код может выглядеть так:
const obj = {
a: {
b: {
c: 1,
d: 2,
e: 3
},
f: {
g: 4,
h: 5
}
},
i: 6,
j: 7
};
const flatObject = (obj) => {
function flat(o) {
return Object.entries(o).flatMap(([key, val]) => {
if (typeof val === 'object') return flat(val);
return [
[key, val]
];
});
}
return Object.fromEntries(flat(obj));
};
console.log(flatObject(obj)) // { c: 1, d: 2, e: 3, g: 4, h: 5, i: 6, j: 7 };