如何将嵌套对象结构的revisions数组转换为扁平化表格格式数组
解决方案
首先你需要先收集所有数据里出现过的非主键字段,确保每条输出的属性统一,缺失值自动补空,实现逻辑如下:
实现代码
function loopData(revisions: any) { // 第一步:收集所有出现过的非主键字段,去重 const allFields = new Set<string>(); revisions.data.forEach((item: Record<string, any>) => { Object.keys(item).forEach(key => { // 主键(cId/dccId)单独处理,不进通用字段集合 if (key !== 'cId' && key !== 'dccId') { allFields.add(key); } }); }); const fieldList = Array.from(allFields); // 第二步:遍历转换每条数据 const newData = revisions.data.map((item: Record<string, any>) => { // 先处理统一主键cId const result: Record<string, any> = { cId: (item.cId?.value ?? item.dccId?.value ?? '') + '' }; // 遍历所有通用字段,生成New/Old后缀属性 fieldList.forEach(field => { const fieldData = item[field]; result[`${field}New`] = fieldData?.value !== undefined ? fieldData.value + '' : ''; result[`${field}Old`] = fieldData?.oldValue !== undefined ? fieldData.oldValue + '' : ''; }); return result; }); console.log(JSON.stringify(newData, null, 2)); return newData; }
逻辑说明
- 先遍历所有原始数据项,把所有非主键的字段名去重存下来,保证每条输出的属性数量完全一致
- 单独处理主键:兼容
cId和dccId两种主键字段名,统一输出为cId属性 - 通用字段自动生成带
New/Old后缀的属性,字段存在则取对应value/oldValue,不存在则赋值为空字符串 - 所有值统一转成字符串格式,和预期输出格式对齐
内容的提问来源于stack exchange,提问作者Garrett Liebman
相关产品推荐
相关产品推荐

