在实践过程中,我希望对端口请求来的数据(数据结果是一个array,多个object组成)进行加工,从而获得两个不同的结果,一开始的处理方法是:
//代码1
axios.post().then(response=>{
const data1=response.data
const data2=response.data
data2.forEach()//通过forEach对其中object进行修改
}).catch()
以上代码forEach()对data1与data2均做了修改,data1=data2,这个时候,我就意识到了在copy过程中出现了问题,data1与data2 甚至于response.data均指向了同一内存地址,于是我考虑使用展开操作符进行对data2赋值。
//代码2
axios.post().then(response=>{
const data1=response.data
const data2=[...data1]
data2.forEach()//通过forEach对其中object进行修改
}).catch()
但结果并不尽如人意,依然与代码1的结果一致,查询了解到了深拷贝和浅拷贝的概念,采用展开操作符是浅拷贝,array中的object 依然是指向同一个内存地址。搜索了网上的多种深拷贝操作的介绍,最终,个人决定使用最简单的一种,lodash工具库的_.cloneDeep。
//代码3
axios.post().then(response=>{
const data1=response.data
const data2=_.cloneDeep(data1)
data2.forEach()//通过forEach对其中object进行修改
}).catch()
ok,实现目的。