smartobject/ts/tools/toFlatObject.ts
2023-07-12 19:40:41 +02:00

30 lines
941 B
TypeScript

export const toFlatObject = (objectArg: object) => {
const returnObject: { [key: string]: any } = {};
const extractLayer = (
subObject: { [key: string]: any },
pathArg: string,
loopProtection: object[]
) => {
if (loopProtection.indexOf(subObject) > -1) {
return;
}
if (subObject)
for (const key of Object.keys(subObject)) {
let localPathArg = pathArg;
if (typeof subObject[key] === 'object' && !(subObject[key] instanceof Array)) {
const newLoopbackArray = loopProtection.slice();
newLoopbackArray.push(subObject);
extractLayer(
subObject[key],
localPathArg ? (localPathArg += `.${key}`) : key,
newLoopbackArray
);
} else {
returnObject[localPathArg ? (localPathArg += `.${key}`) : key] = subObject[key];
}
}
};
extractLayer(objectArg, '', []);
return returnObject;
};