You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:20:40