一个初学者实践JavaScript的第一坑—深浅拷贝

      在实践过程中,我希望对端口请求来的数据(数据结果是一个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,实现目的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值