JSFiddle - React, Tailwind, and code Playground
JavaScript
function flatten(obj) {
let queue = [["",obj]];
let seen = [];
let retval = {};
while (queue.length) {
const [[key,value]] = queue.splice(0,1);
if (typeof value != 'object') {
retval[key.slice(1)] = value;
continue
}
if (seen.includes(value)) {
queue.push([key],'[circular]');
continue
}
if (value === null) {continue}
let entries = Object.entries(value).map(([k,v]) => [(key + "." + k), v]);
queue.push(...entries);
seen.push(value);
}
return retval;
}