Angular嵌套对象与数组格式转换问题求助
Angular表单数据转换解决方案
需求分析
需要将提交给服务器的JSON数据做结构调整:
- 保留
BioData原结构不变 - 将
locationData从嵌套对象改为直接承载地址数组,同时把每个地址项里ContactData下的contactList提至当前层级,移除ContactData嵌套
转换实现(TypeScript)
function transformFormData(sourceData: any): any { // 保留BioData原结构 const transformedData = { BioData: { ...sourceData.BioData } }; // 处理locationData结构 if (sourceData.locationData?.locationList) { transformedData.locationData = sourceData.locationData.locationList.map(locationItem => { // 提取ContactData中的contactList,同时保留原地址字段 const { ContactData, ...rest } = locationItem; return { ...rest, // 容错处理:如果ContactData或contactList不存在,默认空数组 contactList: ContactData?.contactList || [] }; }); } else { // 容错:如果原数据无locationList,设为空数组 transformedData.locationData = []; } return transformedData; }
使用示例
// 你的源数据 const sourceData = { "BioData":{ "firstname": "Greg", "lastName": "John" }, "locationData":{ "locationList":[ // ... 你的地址数据 ] } }; // 转换后的数据 const formattedData = transformFormData(sourceData); // 之后即可将formattedData提交给服务器
说明
- 用
map遍历地址数组,比forEach更适合生成新数组(无副作用) - 解构赋值
{ ContactData, ...rest }快速分离需要提平的字段 - 加入了可选链
?.和默认值处理,避免因字段缺失导致报错
内容的提问来源于stack exchange,提问作者PCoder
相关产品推荐
相关产品推荐

