对象工具
大约 2 分钟
这是一个对象相关的工具类模块,提供了一些对对象的高级操作。
objectFlatten
该函数用于将一个嵌套的对象结构递归地转换为扁平的单层对象,适用于简化深层嵌套对象的访问方式,常用于表单数据处理、对象序列化等场景。
- 自定义键名分隔符
- 忽略值为
null
或undefined
的字段 - 支持多层嵌套对象处理
- 排除数组、
File
、Blob
等非对象类型嵌套处理
重要
- 不会对
Array
、File
、Blob
类型进行递归处理。 - 原始对象不会被修改,返回的是一个新对象。
- 若字段值为
0
、false
、空字符串等合法值,不会被忽略,即使ignoreNull
为true
。 - 建议使用
ignoreNull
来清理无效数据,避免在后续处理中出现意外值。
参数说明
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
obj | Record<string, any> | - | 需要扁平化的源对象,支持多层嵌套结构 |
options | ObjectFlattenOptions | {} | 配置项 |
ObjectFlattenOptions
配置项对象,可选字段如下:
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
parentKey | string | '' | 父级键名(用于递归处理,一般无需手动设置) |
sep | string | '.' | 嵌套键名之间的分隔符 |
ignoreNull | boolean | false | 是否忽略值为 null 或 undefined 的字段 |
返回值
- 类型:
Record<string, any>
- 说明:返回一个扁平化的单层对象,原对象中的嵌套结构将被转换为由分隔符连接的字符串键名。
基本用法
const data = {
a: {
b: 1,
c: {
d: 2,
e: 3,
},
},
};
const result = objectFlatten(data);
console.log(result);
// 输出:
// {
// 'a.b': 1,
// 'a.c.d': 2,
// 'a.c.e': 3
// }
自定义分隔符
const data = {
user: {
info: {
name: 'Tom',
age: 25,
},
},
};
const result = objectFlatten(data, { sep: '_' });
console.log(result);
// 输出:
// {
// 'user_info_name': 'Tom',
// 'user_info_age': 25
// }
忽略 null 和 undefined 值
const data = {
a: null,
b: {
c: undefined,
d: 10,
},
};
const result = objectFlatten(data, { ignoreNull: true });
console.log(result);
// 输出:
// {
// 'b.d': 10
// }
结合 ignoreNull 和 sep 的完整配置
const data = {
config: {
theme: null,
layout: {
header: 'dark',
footer: undefined,
},
},
};
const result = objectFlatten(data, { sep: '-', ignoreNull: true });
console.log(result);
// 输出:
// {
// 'config-layout-header': 'dark'
// }