有时候需要把js多层复杂对象数组新增或修改部分字段,可以采用如下的两种方法。
1)深拷贝法
//以下代码通过深拷贝复制,不会改变原res.data.EquipmentData对象
const newEquipmentData = res.data.EquipmentData.map(eq => {
const newEq = {...eq};
newEq.Modules = newEq.Modules.map(m=>{
const newM = {...m};
newM.Fields = newM.Fields.map((f,i)=>{
const newField={ Index: newM.Index+"."+i, ...f} //新增一个虚拟字段Index,用于防止table出现重名key错误
return newField;
});
return newM;
});
return newEq;
});
2)浅拷贝法
//以下代码通过浅拷贝复制,会同时改变原res.data.EquipmentData对象
const newEquipmentData = res.data.EquipmentData.map(eq => {
eq.Modules = eq.Modules.map(m=>{
m.Fields = m.Fields.map((f,i)=>{
const newField={ Index: m.Index+"."+i, ...f} //新增一个虚拟字段Index,用于防止table出现重名key错误
return newField;
});
return m;
});
return eq;
});
3)附录,以下是res.data.EquipmentData对象的数据结构
"EquipmentData": [
{
ID: 1,
EquipmentID:"cabinet-001",
Name:"机柜-001",
Client:"云涛生物",
GatewayID:"gateway001",
Creator:"admin",
CreateTime:"2019-09-06 14:07:06",
EquipmentTemp:"机柜-04",
Panel:"cabinet-panel-04",
Description:"",
GetwayFields:[