Как сделать Flat object?

FlatObject Напишите функцию, которая возвращает новый объект, в котором все примитивные элементы вложенных объектов были рекурсивно "подняты"(подняты = из вложенного объекта перемещены в текущий) до первого уровня. CODE


Ответы (1 шт):

Автор решения: Grundy

Данную задачу можно свести к задаче уменьшения вложенности массивов.

Для получения из объекта массива можно воспользоваться методом 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 };

→ Ссылка