Skip to content

Instantly share code, notes, and snippets.

@alaindet
Created December 29, 2021 06:41
Show Gist options
  • Save alaindet/555fdd2f8dd3ad47ae3871be2a5c9a9a to your computer and use it in GitHub Desktop.
Save alaindet/555fdd2f8dd3ad47ae3871be2a5c9a9a to your computer and use it in GitHub Desktop.
Flatten object in Typescript
interface NestedObject {
[key: string]: NestedObject | string;
}
interface FlatObject {
[key: string]: string;
}
const flatten = (input: NestedObject): FlatObject => {
const result: FlatObject = {};
const step = (obj: NestedObject | string, prefix: string) => {
if (typeof obj !== 'object') {
result[prefix] = obj;
return;
}
for (const key in obj) {
step(obj[key], prefix ? `${prefix}.${key}` : `${key}`);
}
};
step(input, '');
return result;
};
const stuff = {
a1: {
b1: {
c1: "askjdlsakd",
c2: "dsfjdskfj",
c3: {
d1: "djkfdjslfks"
}
}
}
};
console.clear();
console.log(
flatten(stuff),
);
// RESULT
// {
// "a1.b1.c1": "askjdlsakd",
// "a1.b1.c2": "dsfjdskfj",
// "a1.b1.c3.d1": "djkfdjslfks"
// }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment