flattenObject
将嵌套对象扁平化为单层对象,使用点号连接嵌套的键名。
函数签名
typescript
function flattenObject(
obj: Record<string, any>,
prefix?: string,
result?: Record<string, any>
): Record<string, any>参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
obj | Record<string, any> | 是 | - | 要扁平化的对象 |
prefix | string | 否 | '' | 键名前缀(内部递归使用) |
result | Record<string, any> | 否 | {} | 结果对象(内部递归使用) |
返回值
| 类型 | 说明 |
|---|---|
Record<string, any> | 扁平化后的单层对象 |
工作原理
- 初始化结果对象(如果未提供)
- 遍历对象的所有键值对:
- 构建完整键名:
- 有 prefix:
${prefix}.${key} - 无 prefix:
key
- 有 prefix:
- 检查值的类型:
- 如果值是普通对象且不为 null:
- 递归调用
flattenObject - 传入当前完整键名作为新 prefix
- 递归调用
- 如果值不是对象(基本类型、数组、null等):
- 直接将键值对添加到结果对象
- 如果值是普通对象且不为 null:
- 构建完整键名:
- 返回结果对象
示例:
typescript
flattenObject({
user: {
name: 'Alice',
address: {
city: 'Beijing'
}
}
})
// →
{
'user.name': 'Alice',
'user.address.city': 'Beijing'
}使用递归实现,支持任意深度的嵌套。数组不会被扁平化,会作为值直接保留。