前言

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

准备

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

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数组复制或克隆新数组修改不影响原数组相关推荐

  1. js中不会影响原数组的方法

    1:concat() 该方法可以连接两个或多个数组,并将新的数组返回.不会对原数组产生影响 2:join() 该方法可以将数组转换为一个字符串 该方法不会对原数组产生影响,而是将转换后的字符串作为结果 ...

  2. JavaScript数组方法大全(分为会不会改变原数组)

    若看不懂注释的输出方式可以将代码粘贴到浏览器中执行观看 1. 数组通用方法 Array.from: 将一个类数组转化成数组 类数组:Set, Map,对象等可遍历对象皆为类数组 Array.from( ...

  3. js中数组方法不会影响原数组的方法

    不会改变原数组方法: concat(),用于连接两个或多个数组: every().用于检测数组 所有元素是否都符合原始数组: filter(),创建一个新的数组,新数组的元素是通过检查指定数组中符合条 ...

  4. JS中数组的常用方法(concat拼接,join修改间隔符,pop移除最后一个元素,push在数组最后添加新的元素,reverse反转数组元素,shift移除第一个元素,unshift添加,spli)

    <html><head><title>js数组的常用方法</title><meta charset="UTF-8"/>& ...

  5. JS数组方法中哪些会改变原数组,哪些不会?

    前言 作为一名前端开发人员,我们每天都会与数组打交道.JS 也提供了很多操作数组的原生 API 供我们调用.在这些方法里面,有的方法会改变原数组,有些不会改变原数组.别看这一点小小的区别,往往会造成巨 ...

  6. js数组方法-改变原数组和不改变原数组的方法整理

    改变原数组: pop():   删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值.如果数组已经为空,则 pop() 不 改变数组,并返回 undefined ...

  7. .net 遍历数组找重复值写入一个新数组_第二轮 Python 刷题笔记一:数组

    经过四十多天缓慢的刷题,现在进度大概是刷了八十多道 LeetCode 题,最近也在吸取过来人的经验,仍然需要对刷题计划进行调整. 首先明确一下目标,我是有些 Python 基础,想通过刷题掌握更多算法 ...

  8. c语言json数组转字符串数组,Json数组转换字符串、字符串转换原数组......

    Title 标题: 颜色: 字体: 合并数组,改变原数组apply与不改变原数组 一看见合并数组,可能第一反应就是concat,concat确实具有我们想要的行为,但它实际上并不附加到现有数组,而是创 ...

  9. python定义一个空数组_在NumPy中如何创建一个空的数组/矩阵?

    如何以我通常使用列表(List)的方式使用Numpy数组或矩阵? 我想创建一个空的数组(或矩阵),然后每次添加一列(或行)到这个数组(或矩阵). 目前能想到的方法是: mat = None for c ...

最新文章

  1. bat、sh等批处理文件(脚本文件)
  2. 环境监控告警系统之TIM即时消息推送部署
  3. Java基础学习笔记之:System类;Math类;Arrays类BigInteger,BigDecimal
  4. 用map实现数据字典功能
  5. OpenCV学习笔记五-图像混合
  6. 使用Pitcher简化卫语句
  7. 膜拜大丹(结论+二元环)
  8. Linux : rz、sz命令-从本地拷贝文件到服务器
  9. 如何通过改造休闲旅行车赚到1000万元?
  10. 学习Java,真的可以月薪过万嘛?真实个人经历告诉你,记录了平时学习的内容以及学习过程中最真实的感受(四)
  11. 《Java就业培训教程》_张孝祥_书内源码_06
  12. Linux 现在常用的图形化远控软件的大体介绍
  13. WPS文字中的某些内容下方出现的红色波浪线怎么去掉?
  14. 生物信息学:根据PDB名称、爬虫PDB数据库的信息、保存到Excel里
  15. 模块化笔记软件 Anytype 综合评测
  16. MentoHUST的使用教程
  17. yapi 接口管理平台手册
  18. matlab批量处理程序设计,Matlab实现批量处理图像的两种方法
  19. python中val的意思_python中val是什么
  20. 成都北大青鸟怎么样?

热门文章

  1. 成绩工资水电费证书等综合查询系统源码
  2. 计算机专业对应的职业,这十个高薪职业对应哪些大学专业?看完你就明白啦
  3. LintCode-解码方法
  4. LaTex公式、函数、希腊字母、符号、运算符号总结
  5. 商业银行业务学习(一)
  6. 解决:网络文件夹目前是以其他用户名和密码进行映射的
  7. LuceneElasticSeachKafka
  8. 22个应届生word简历模板
  9. 手机壁纸设置以及图片下载保存到本地
  10. Python break语句:多层循环中break是终止(或跳出)本层(也即所在层)循环,后者说是跳出最内层循环。也就是break只能跳出一层循环而不是多层循环