1、场景描述
react项目 ,拿到后台数据之后需要经过处理之后显示在页面,所以:
const [primary, setPrimary] = useState<OrderCargoDtoType[]>([]);
const data = primary
for (let i = 0; i < primary.length; i++) {
data[i].itemVolume = data[i].itemVolume / 1000000;
}
上面的代码,看起来就是只修改了data
的数据,没有修改primary
,所以直接返回data
就可以展示在页面。
但是,,,,,这个属于浅拷贝,即便没有setPrimary()
,primary
也是随之修改了,浅拷贝不会开辟新的地址空间。
所以,,,,这里需要的是深拷贝。
1、第一种拷贝方式
Array.map()
const data = primary.map((item) => {
return {
...item,
};
});
这种拷贝方式,明了,不多说!
2、第二种拷贝方式
JSON.parse(JSON.stringify(oldObj))
const data= JSON.parse(JSON.stringify(primary))
JSON.parse(JSON.stringify(oldObj))
; 简单粗暴没有之一,注意这个方法会忽略掉为undefined的属性,不过数据库一般存的是null而非undefined,所以也可能忽略这个缺点