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

如何遍历嵌套多维数组并转换为指定格式对象?

解决方案:整理嵌套数据为合法的JavaScript结构

首先明确:JavaScript对象不允许重复属性名,你示例里的newObj结构是无效的,后定义的同名属性会直接覆盖前面的。以下提供两种常用的合法实现方案:

方案1:生成包含documentCode和documentKey的对象数组

这种方式保留所有文档条目,适合需要遍历或批量处理所有文档信息的场景:

const payload = [
  {
    title: "ADDITIONAL",
    data: [
      {
        documentCategory: "ADDITIONAL",
        documentCode: "CUSTOMER_CLAIM_FORM",
        documentKey: "customer/9fdf7ca8-4251-41c8-9116-6d006fa64aea/800123000004054/LIFESAVER_DEATH/LIFESAVER_DEATH_CUSTOMER_CLAIM_FORM_ca2b0204-b8c4-42f7-b059-580818789a64.jpg"
      },
      {
        documentCategory: "ADDITIONAL",
        documentCode: "POWER_OF_ATTORNEY",
        documentKey: "customer/9fdf7ca8-4251-41c8-9116-6d006fa64aea/800123000004054/LIFESAVER_DEATH/LIFESAVER_DEATH_POWER_OF_ATTORNEY_6de88371-c666-4ce5-87f2-8aedf778f4c4.jpg"
      },
      {
        documentCategory: "ADDITIONAL",
        documentCode: "POLICE_RECORD",
        documentKey: "customer/9fdf7ca8-4251-41c8-9116-6d006fa64aea/800123000004054/LIFESAVER_DEATH/LIFESAVER_DEATH_POLICE_RECORD_15d989de-9cfb-4574-8451-92f445177331.jpg"
      }
    ],
    chevronFlag: true
  }
];

// 实现代码
const resultArray = payload.flatMap(item => 
  item.data.map(doc => ({
    documentCode: doc.documentCode,
    documentKey: doc.documentKey
  }))
);

console.log(resultArray);

输出结构:

[
  { documentCode: "CUSTOMER_CLAIM_FORM", documentKey: "xxx.jpg" },
  { documentCode: "POWER_OF_ATTORNEY", documentKey: "xxx.jpg" },
  { documentCode: "POLICE_RECORD", documentKey: "xxx.jpg" }
]

方案2:生成以documentCode为键、documentKey为值的对象

这种方式适合通过文档编码快速查找对应文件路径的场景(注意:如果存在重复的documentCode,后续条目会覆盖前面的):

// 实现代码
const resultObj = payload.reduce((acc, item) => {
  item.data.forEach(doc => {
    acc[doc.documentCode] = doc.documentKey;
  });
  return acc;
}, {});

console.log(resultObj);

输出结构:

{
  CUSTOMER_CLAIM_FORM: "customer/9fdf7ca8-4251-41c8-9116-6d006fa64aea/800123000004054/LIFESAVER_DEATH/LIFESAVER_DEATH_CUSTOMER_CLAIM_FORM_ca2b0204-b8c4-42f7-b059-580818789a64.jpg",
  POWER_OF_ATTORNEY: "customer/9fdf7ca8-4251-41c8-9116-6d006fa64aea/800123000004054/LIFESAVER_DEATH/LIFESAVER_DEATH_POWER_OF_ATTORNEY_6de88371-c666-4ce5-87f2-8aedf778f4c4.jpg",
  POLICE_RECORD: "customer/9fdf7ca8-4251-41c8-9116-6d006fa64aea/800123000004054/LIFESAVER_DEATH/LIFESAVER_DEATH_POLICE_RECORD_15d989de-9cfb-4574-8451-92f445177331.jpg"
}

原有代码未达预期的原因

你的代码用map返回原item,只是复制了每个data数组里的完整对象,既没有筛选出需要的documentCode和documentKey,也没有合并payload中所有条目下的数据。上面的方案通过flatMap(合并多组数组)或reduce(逐步构建目标对象)解决了这两个问题。


内容的提问来源于stack exchange,提问作者Ray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:57:35