如何使用.reduce()将含数组的嵌套对象转为带数组的平面对象
使用.reduce()展开嵌套对象的解决方案
原对象
const myObject = { first: 'A', second: { nestedArr1: ['nestA', 'nestB'], nestedArr2: ['nestC', 'nestD'], } }
预期结果
{ first: 'A', nestedArr1: ['nestA', 'nestB'], nestedArr2: ['nestC', 'nestD'], }
实现代码
const myObject = { first: 'A', second: { nestedArr1: ['nestA', 'nestB'], nestedArr2: ['nestC', 'nestD'], } }; const flattenedObject = Object.entries(myObject).reduce((acc, [key, value]) => { // 仅处理非数组类型的嵌套对象 if (typeof value === 'object' && !Array.isArray(value)) { Object.assign(acc, value); } else { acc[key] = value; } return acc; }, {}); console.log(flattenedObject);
代码说明
- 用
Object.entries()将原对象转换为键值对数组,为reduce()遍历提供基础 - 初始化累加器
acc为空对象,用于存储最终结果 - 遍历每个键值对时:
- 若当前值是非数组对象,则通过
Object.assign()将其内部属性合并到累加器 - 若为其他类型(字符串、数组等),直接将键值对添加到累加器
- 若当前值是非数组对象,则通过
- 最终返回的累加器即为扁平化后的目标对象
这个方案不仅能处理单个嵌套对象,若原对象存在多个类似second的嵌套属性,也会自动全部展开。
内容的提问来源于stack exchange,提问作者Dariusz Legizynski
相关产品推荐
相关产品推荐

