如何遍历嵌套多维数组并转换为指定格式对象?
解决方案:整理嵌套数据为合法的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
相关产品推荐
相关产品推荐

