【js】JS数组复制或克隆新数组修改不影响原数组

 


前言

有个需求,在修改记录前需要记录下原来的数组内容,为了后续恢复。

准备

网上的很多方法都试过不行,例如。

et arr = [1,2,3,]; let arr1 = arr.clone(); let arr1 = arr.concat(); let arr1 = arr.slice(); 又或者遍历直接插进去: arr .forEach(item => { arr1 .push(item); })

至于说为什么:

数组存储对象都是存地址的,所以浅复制会导致 a 和 b 指向同一块内存地址;

例如:

var a=[1,2] var b=a

则b存储的地址指向了数组[1,2],

如果直接对数组操作,push,pop等,则a,b都会发生变化,因为a和b都指向了堆中的这个数组。

但是假如这样操作,b=[3,4];这个时候发现a没有变化还是[1,2];这是为什么,其实这个不同于刚才的操作,

因为b=[3,4], []是JavaScript的语法糖,new Array();相当于给b重新开辟了堆空间,所以b的地址指向了新的堆地址,而a还是指向之前的地址,所以a和b变得没有关系了。

实施

终于看到一个可以用的!

JSON.stringify( arr ); JSON.parse( arr );

先把数组转成Json再转回去,先转再转就可以完美避开同时修改的问题了!

let arr1 = JSON.parse(JSON.stringify(arr));

参考:

  • https://blog.csdn.net/qq_40310480/article/details/102941672?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link
  • https://blog.csdn.net/seaalan/article/details/90081473
  • https://www.cnblogs.com/gaojian0927/p/9765319.html

__EOF__

本文作者彬在俊
本文链接https://www.cnblogs.com/erlou96/p/16878248.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   彬在俊  阅读(713)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示