如何将JavaScript对象中的子属性拆分至独立数组
解决方案
要实现将嵌套对象中所有含多键的字段拆分为保留完整父结构的独立对象数组,可以用递归遍历的方式处理,核心思路是遇到多键对象时,为每个子键单独生成一份完整的父结构,最终合并所有结果。
实现代码
function splitMultiKeyObjects(obj) { // 非对象类型直接返回包含自身的数组 if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) { return [obj]; } const keys = Object.keys(obj); // 单键对象:递归处理子值后包装回当前键结构 if (keys.length <= 1) { const key = keys[0]; return splitMultiKeyObjects(obj[key]).map(result => ({ [key]: result })); } // 多键对象:遍历每个键,生成独立结构后合并 let results = []; for (const key of keys) { const childResults = splitMultiKeyObjects(obj[key]); results = results.concat(childResults.map(result => ({ [key]: result }))); } return results; } // 测试示例 const input = { field1: { field2: { field3: "value 1", field4: "value 2" } } }; const output = splitMultiKeyObjects(input); console.log(JSON.stringify(output, null, 2));
代码逻辑说明
- 终止条件:如果当前处理的值不是对象(或为空、是数组),直接返回包含该值的数组,作为最底层的结果单元。
- 单键对象处理:当对象只有一个键时,先递归处理该键对应的子值,再把每个子结果重新包装成当前键的结构,确保父路径不丢失。
- 多键对象处理:遍历对象的每个键,对每个键的子值递归拆分后,将子结果包装成当前键的结构,最后把所有这些独立结构合并到结果数组中。
这种实现支持任意深度的嵌套,只要遇到包含多个键的对象,都会自动拆分出所有可能的独立路径结构。
内容的提问来源于stack exchange,提问作者Tyler Edwards
相关产品推荐
相关产品推荐

