【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
【js】JS数组复制或克隆新数组修改不影响原数组相关推荐
- js中不会影响原数组的方法
1:concat() 该方法可以连接两个或多个数组,并将新的数组返回.不会对原数组产生影响 2:join() 该方法可以将数组转换为一个字符串 该方法不会对原数组产生影响,而是将转换后的字符串作为结果 ...
- JavaScript数组方法大全(分为会不会改变原数组)
若看不懂注释的输出方式可以将代码粘贴到浏览器中执行观看 1. 数组通用方法 Array.from: 将一个类数组转化成数组 类数组:Set, Map,对象等可遍历对象皆为类数组 Array.from( ...
- js中数组方法不会影响原数组的方法
不会改变原数组方法: concat(),用于连接两个或多个数组: every().用于检测数组 所有元素是否都符合原始数组: filter(),创建一个新的数组,新数组的元素是通过检查指定数组中符合条 ...
- JS中数组的常用方法(concat拼接,join修改间隔符,pop移除最后一个元素,push在数组最后添加新的元素,reverse反转数组元素,shift移除第一个元素,unshift添加,spli)
<html><head><title>js数组的常用方法</title><meta charset="UTF-8"/>& ...
- JS数组方法中哪些会改变原数组,哪些不会?
前言 作为一名前端开发人员,我们每天都会与数组打交道.JS 也提供了很多操作数组的原生 API 供我们调用.在这些方法里面,有的方法会改变原数组,有些不会改变原数组.别看这一点小小的区别,往往会造成巨 ...
- js数组方法-改变原数组和不改变原数组的方法整理
改变原数组: pop(): 删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值.如果数组已经为空,则 pop() 不 改变数组,并返回 undefined ...
- .net 遍历数组找重复值写入一个新数组_第二轮 Python 刷题笔记一:数组
经过四十多天缓慢的刷题,现在进度大概是刷了八十多道 LeetCode 题,最近也在吸取过来人的经验,仍然需要对刷题计划进行调整. 首先明确一下目标,我是有些 Python 基础,想通过刷题掌握更多算法 ...
- c语言json数组转字符串数组,Json数组转换字符串、字符串转换原数组......
Title 标题: 颜色: 字体: 合并数组,改变原数组apply与不改变原数组 一看见合并数组,可能第一反应就是concat,concat确实具有我们想要的行为,但它实际上并不附加到现有数组,而是创 ...
- python定义一个空数组_在NumPy中如何创建一个空的数组/矩阵?
如何以我通常使用列表(List)的方式使用Numpy数组或矩阵? 我想创建一个空的数组(或矩阵),然后每次添加一列(或行)到这个数组(或矩阵). 目前能想到的方法是: mat = None for c ...
最新文章
- bat、sh等批处理文件(脚本文件)
- 环境监控告警系统之TIM即时消息推送部署
- Java基础学习笔记之:System类;Math类;Arrays类BigInteger,BigDecimal
- 用map实现数据字典功能
- OpenCV学习笔记五-图像混合
- 使用Pitcher简化卫语句
- 膜拜大丹(结论+二元环)
- Linux : rz、sz命令-从本地拷贝文件到服务器
- 如何通过改造休闲旅行车赚到1000万元?
- 学习Java,真的可以月薪过万嘛?真实个人经历告诉你,记录了平时学习的内容以及学习过程中最真实的感受(四)
- 《Java就业培训教程》_张孝祥_书内源码_06
- Linux 现在常用的图形化远控软件的大体介绍
- WPS文字中的某些内容下方出现的红色波浪线怎么去掉?
- 生物信息学:根据PDB名称、爬虫PDB数据库的信息、保存到Excel里
- 模块化笔记软件 Anytype 综合评测
- MentoHUST的使用教程
- yapi 接口管理平台手册
- matlab批量处理程序设计,Matlab实现批量处理图像的两种方法
- python中val的意思_python中val是什么
- 成都北大青鸟怎么样?