Вы можете просто рекурсивно reduce()
записи объекта:
const flatten = o => Object.entries(o).reduce((a, [k, v]) => ({
...a,
...typeof v === 'object' ? flatten(v) : {[k]: v}
}), {});
Полный фрагмент:
const data = {
a: 'a',
b: 'b',
c: {
ca: 'ca',
obj: {
key: 'val'
}
}
};
const flatten = o => Object.entries(o).reduce((a, [k, v]) => ({
...a,
...typeof v === 'object' ? flatten(v) : {[k]: v}
}), {});
console.log(flatten(data));