如何将后端返回的带动态序号键的对象转换为按序号分组的对象数组
动态序号字段转对象数组实现方案
以下实现会自动识别后端返回字段里的所有数字序号,不需要硬编码循环上限,同时兼容带下划线和不带下划线的字段命名规则:
function transformData(rawData) { // 可根据业务需要自行增减输出字段前缀 const outputFieldPrefix = [ 'schedule', 'kubikasi', 'status_so', 'namakendaraan', 'kendaraan', 'totalCarton', 'tonase', 'totalTonaseKendaraan', 'totalPercentaseTonaseOrder', 'totalKubikasiKendaraan', 'totalPercentaseKubikasiOrder', 'nomor_so' ] // 收集所有字段携带的序号 const indexSet = new Set() Object.keys(rawData).forEach(key => { const matchRes = key.match(/\d+$/) if (matchRes) indexSet.add(Number(matchRes[0])) }) // 按序号顺序生成结果数组 return Array.from(indexSet) .sort((a, b) => a - b) .map(index => { const item = {} outputFieldPrefix.forEach(prefix => { // 同时适配 schedule1、schedule_1 两种命名格式 item[prefix] = rawData[`${prefix}${index}`] ?? rawData[`${prefix}_${index}`] ?? null }) return item }) }
使用示例
// 你的后端返回数据 const fetchResult = { cmo: 'integrated', schedule1: '2021-08-12', schedule2: '2021-09-20', kendaraan: {}, kubikasi1: 207000, kubikasi2: 20000, status_so1: true, status_so2: false, } // 调用转换 const result = transformData(fetchResult)
特性
- 自动识别所有数字序号,支持任意大小的序号值,不用硬编码循环范围
- 自动兼容字段有无下划线的命名差异
- 缺失字段自动赋值为null,符合原有业务逻辑
- 输出字段可通过修改
outputFieldPrefix数组灵活配置,维护成本低
内容的提问来源于stack exchange,提问作者Hasan-Almujtaba
相关产品推荐
相关产品推荐

