interface NestedData<T> {
[key: string]: T | NestedData<T> | NestedData<T>[];
}
function flattenNestedData<T>(data: NestedData<T>): T[] {
const result: T[] = [];
function traverse(obj: NestedData<T> | NestedData<T>[]) {
if (Array.isArray(obj)) {
for (const item of obj) {
traverse(item);
}
} else {
for (const value of Object.values(obj)) {
if (typeof value === 'object' && value!== null) {
traverse(value);
} else if (typeof value!== 'undefined') {
result.push(value);
}
}
}
}
traverse(data);
return result;
}