Angular12中将文件上传返回数组转换为API要求JSON对象的实现方法
实现代码
你之前的代码错误点是每次循环都创建独立的外层对象,没有对相同id+name的项做聚合,以下是兼容多组id+name聚合的通用实现:
// sourceArray 为你文件上传返回的原始数组 // dateParam 为你自定义的日期参数 const groupMap = new Map<string, any>(); sourceArray.forEach(item => { // 用id和name拼接唯一分组标识 const groupKey = `${item.id}-${item.name}`; // 分组不存在则初始化结构 if (!groupMap.has(groupKey)) { groupMap.set(groupKey, { id: item.id, name: item.name, array1: [{ date: dateParam, endDate: '', lastUpdatedBy: 'me', array2: [] }] }); } // 向对应分组的array2追加当前项的职业和偏好数据 groupMap.get(groupKey).array1[0].array2.push({ job: item.job, preference: item.preference }); }); // 最终需要传给后端的结果 const finalData = Array.from(groupMap.values());
如果你的业务场景中可以确定所有原始数据的id和name完全一致,也可以用简化写法:
if (!sourceArray.length) { const finalData = []; } else { const baseInfo = sourceArray[0]; const finalData = [{ id: baseInfo.id, name: baseInfo.name, array1: [{ date: dateParam, endDate: '', lastUpdatedBy: 'me', array2: sourceArray.map(item => ({ job: item.job, preference: item.preference })) }] }]; }
两种写法都可以直接在Angular 12的TS文件中运行,输出的结构完全符合你给的后端要求格式。
内容的提问来源于stack exchange,提问作者sharpshooter
相关产品推荐
相关产品推荐

