Разворачивание вложенного объекта

Medium
ObjectStackSberYandex

Реализуйте функцию flattenObject(obj), которая «раскрывает» вложенный объект в плоский, используя точечную нотацию для ключей.

flattenObject({ a: { b: { c: 1 } }, d: 2 })
// => { "a.b.c": 1, "d": 2 }

flattenObject({ x: { y: 1, z: { w: 2 } } })
// => { "x.y": 1, "x.z.w": 2 }
Подсказка

Итеративный вариант: стек из пар { obj, prefix }. На каждой итерации достаём пару, обходим ключи. Если значение — вложенный объект, кладём в стек с обновлённым prefix. Иначе записываем в result.

Подсказка

Рекурсивный вариант: функция принимает (obj, prefix, result) и вызывает себя для каждого вложенного объекта. Передавать result сквозь рекурсию эффективнее, чем сливать объекты на каждом уровне.

Подсказка

Что ещё могут спросить: реализовать обратную функцию unflattenObject({ "a.b.c": 1 }) => { a: { b: { c: 1 } } }. Или поддержать массивы: { a: [1, 2] } => { "a.0": 1, "a.1": 2 }.

Ваш код - JavaScript
Результаты
Нажмите «Запуск» для выполнения кода