javascript无原生对象扁平化语法,需用object.entries+递归实现:遍历键值对,对象递归拼接路径,基础类型直接写入,数组按索引展开为"key.0"形式,浅层可用flatmap优化。

JavaScript 中没有原生的“对象属性扁平化展开”语法(比如像解构那样直接展开嵌套属性),但可以通过组合现有 API 实现类似效果——核心思路是递归遍历对象,将嵌套路径转为点号分隔的键名,生成新对象。
用 Object.entries + 递归实现扁平化
这是最常用、可控性最强的方式。遍历每一层键值对,遇到对象就递归处理,拼接路径;遇到非对象值就写入结果。
- 使用 Object.entries() 获取当前层级的 [key, value] 对
- 对每个 value 判断是否为普通对象(且非 null、非数组),是则递归调用并拼接前缀 key
- 基础值(string/number/boolean/null/undefined)直接写入扁平对象,键名为
prefix.key
支持数组索引的扁平化(如 user.hobbies[0].name)
默认递归只处理对象,若需保留数组结构,可将数组视为特殊对象:对数组项用数字索引拼接,例如 arr[0] → "arr.0"。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 检测 Array.isArray(value),是则对每个索引 i 递归处理
value[i],键路径追加.${i} - 避免把数组当作普通对象遍历(否则会得到
"0"、"length"等非预期键)
用 reduce + flatMap 模拟(适合浅层或固定深度)
对于已知最多两层的场景,可用 Object.entries().flatMap() 配合条件映射,避免递归开销。
- 第一层用 entries 得到所有键值对
- 对值为对象的项,再用 entries 展开二级键,映射为
[key1.key2, value2] - 用 Object.fromEntries() 合并所有键值对
第三方库参考:lodash 的 _.flattenDeep 不适用,但 _.mapKeys + 自定义遍历可复用
lodash 本身不提供对象扁平化方法,但可借助 _.flatMapDeep 或封装递归函数复用其工具链(如 _.isPlainObject、_.keysIn)。
- 优势:自动处理 Date、RegExp 等特殊对象类型(按需决定是否展开)
- 注意:默认不会扁平数组,仍需单独判断 Array.isArray
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










