Skip to content

flattenObject

将嵌套对象扁平化为单层对象,使用点号连接嵌套的键名。

函数签名

typescript
function flattenObject(
  obj: Record<string, any>,
  prefix?: string,
  result?: Record<string, any>
): Record<string, any>

参数

参数名类型必填默认值说明
objRecord<string, any>-要扁平化的对象
prefixstring''键名前缀(内部递归使用)
resultRecord<string, any>{}结果对象(内部递归使用)

返回值

类型说明
Record<string, any>扁平化后的单层对象

工作原理

  1. 初始化结果对象(如果未提供)
  2. 遍历对象的所有键值对
    • 构建完整键名:
      • 有 prefix:${prefix}.${key}
      • 无 prefix:key
    • 检查值的类型:
      • 如果值是普通对象且不为 null:
        • 递归调用 flattenObject
        • 传入当前完整键名作为新 prefix
      • 如果值不是对象(基本类型、数组、null等):
        • 直接将键值对添加到结果对象
  3. 返回结果对象

示例

typescript
flattenObject({
  user: {
    name: 'Alice',
    address: {
      city: 'Beijing'
    }
  }
})
// →
{
  'user.name': 'Alice',
  'user.address.city': 'Beijing'
}

使用递归实现,支持任意深度的嵌套。数组不会被扁平化,会作为值直接保留。