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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:06:13