Node.js TypeScript API:如何用for循环转换对象数组为指定格式
使用for循环实现Node.js API数据结构转换的解决方案
原始数据结构
[ { "issuer_id": 2639, "job_title": "Sales Manager", "hr-contact": "9767865459", "adress": "bangalore", "image": "http://localhost:3003/public/uploads/company-logos/undefined", "getEmployerDetail": [ { "issuer_id": 2639, "Field_of_activity": "Jobs", "id": 111, "Section": "Communes", "Content": "Mühlwald", "foa_section_content_id": 111 }, { "issuer_id": 2639, "Field_of_activity": "Jobs", "id": 112, "Section": "Communes", "Content": "Wolkenstein in Gröden", "foa_section_content_id": 112 }, { "issuer_id": 2639, "Field_of_activity": "Jobs", "id": 113, "Section": "Communes", "Content": "Schnals", "foa_section_content_id": 113 }, { "issuer_id": 2639, "Field_of_activity": "Jobs", "id": 150, "Section": "Professional field", "Content": "Marketing, Graphics, PR", "foa_section_content_id": 150 }, { "issuer_id": 2639, "Field_of_activity": "Jobs", "id": 162, "Section": "Branch", "Content": "Banks, Finance, Insurance", "foa_section_content_id": 162 }, { "issuer_id": 2639, "Field_of_activity": "Jobs", "id": 215, "Section": "Benefits", "Content": "Enrolment programme", "foa_section_content_id": 215 }, { "issuer_id": 2639, "Field_of_activity": "Jobs", "id": 220, "Section": "Benefits", "Content": "Childcare", "foa_section_content_id": 220 } ] } ]
目标数据结构
[ { "issuer_id": 2639, "job_title": "Sales Manager", "hr-contact": "9767865459", "adress": "bangalore", "image": "http://localhost:3003/public/uploads/company-logos/undefined", "employmentType": [ { "id": 198, "Employment_type": "Freelancer" } ], "professionalField": [ { "id": 150, "Professional_field": "Marketing, Graphics, PR" } ], "benefits": [ { "id": 215, "Benefits": "Enrolment programme" }, { "id": 219, "Benefits": "Canteen" }, { "id": 220, "Benefits": "Childcare" }, { "id": 221, "Benefits": "Employee events" }, { "id": 222, "Benefits": "Employee mobile phone" }, { "id": 223, "Benefits": "Employee notebook" }, { "id": 224, "Benefits": "Employee bonuses" } ], "branch": [ { "id": 162, "Branch": "Banks, Finance, Insurance" } ], "communes": [], "positionLevel": [], "skillSets": [], "languageSkills": [], "skillRepository": [], "jobCluster": [], "jobClusterDescription": [] } ]
基于for循环的转换代码实现
// 原始数据 const originalData = [/* 上述原始数据数组 */]; // 转换函数 function transformData(data) { const result = []; // 遍历原始数组的每个条目 for (let i = 0; i < data.length; i++) { const item = data[i]; // 初始化目标对象,复制基础字段并创建空数组结构 const transformedItem = { issuer_id: item.issuer_id, job_title: item.job_title, "hr-contact": item["hr-contact"], adress: item.adress, image: item.image, employmentType: [], professionalField: [], benefits: [], branch: [], communes: [], positionLevel: [], skillSets: [], languageSkills: [], skillRepository: [], jobCluster: [], jobClusterDescription: [] }; // 添加employmentType固定项 transformedItem.employmentType.push({ id: 198, Employment_type: "Freelancer" }); // 遍历getEmployerDetail,分类填充数据 for (let j = 0; j < item.getEmployerDetail.length; j++) { const detail = item.getEmployerDetail[j]; switch (detail.Section) { case "Communes": transformedItem.communes.push({ id: detail.id, Communes: detail.Content }); break; case "Professional field": transformedItem.professionalField.push({ id: detail.id, Professional_field: detail.Content }); break; case "Branch": transformedItem.branch.push({ id: detail.id, Branch: detail.Content }); break; case "Benefits": transformedItem.benefits.push({ id: detail.id, Benefits: detail.Content }); break; } } // 添加benefits中的固定补充项 const additionalBenefits = [ { id: 219, Benefits: "Canteen" }, { id: 221, Benefits: "Employee events" }, { id: 222, Benefits: "Employee mobile phone" }, { id: 223, Benefits: "Employee notebook" }, { id: 224, Benefits: "Employee bonuses" } ]; for (let k = 0; k < additionalBenefits.length; k++) { transformedItem.benefits.push(additionalBenefits[k]); } result.push(transformedItem); } return result; } // 执行转换 const transformedData = transformData(originalData); console.log(JSON.stringify(transformedData, null, 2));
代码说明
- 外层for循环遍历原始数据的每个条目,逐个进行结构转换
- 先初始化目标对象,复制所有基础字段,并创建目标结构要求的空数组字段
- 内层for循环遍历
getEmployerDetail数组,通过switch判断Section值,将对应数据存入目标对象的对应数组 - 针对原始数据中没有的固定项(如
employmentType和部分benefits),直接手动添加或通过额外的for循环批量插入 - 所有转换完成后,将结果收集到数组中返回
内容的提问来源于stack exchange,提问作者jaga b
相关产品推荐
相关产品推荐

