数组的深clone
来源:互联网 发布:labview串口数据采集 编辑:程序博客网 时间:2024/05/16 09:18
上一篇博文写了对象的深拷贝,这些天在工作中,正好遇到了出在同样身为”引用类型”,数组身上的问题。
先说下需求:
通过UE图看出需求,表格中的每一行是通过点击添加按钮,动态添加到表格中的;并且在每一行中会有很多需要填入配置项的输入框;
技术:react
问题:根据数据驱动原理,这个表格的生成依靠的是一个数组数据tableList
,这个数组中的每一个元素是一个object
,object
中有个value
属性的值也是数组,这个数组用来生成配置输入框,类似于这样:
const tableList = [{id:1, value:[],type:3},{id:1, value:[],type:3},{id:1, value:[],type:3}...]
问题:tableList中的每一个元素都是表格中的一列,那么如果想增加一列的话,就往tableList中push一个新的object,那么react自动会渲染出新一列表格,这看似没什么问题;但是问题恰恰出现了,当你在第一列的输入框中输入内容的时候,第二列、第三列、第四列…中的输入框都会显示同一内容;
debug:这个问题原因是,当每次往tableList数组中push一个新的对象的时候,这个对象中也含有数组,数组是个引用类型,在追加的时候,只是追加了内存栈中的引用地址,这些引用地址指向了内存堆中的同一数组内容,进而出现使输入框联动的问题;这就需要我们每次往tableList中push对象的时候,让这个对象中的数组是个经过深拷贝的数组,不仅仅是引用地址。
下面就说下数组的深拷贝:
当然方法有很多,我在网上也看到了很多方法,其中for循环是可用的,但是在这里我要介绍一种新的方法,新的思路:
const arr = [1,2,3,4,5];const deepCloneArr = JSON.parse(JSON.stringify(arr));
将一个数组转换为字符串,因为字符串是基本类型,再把这字符串转为数组,这样就实现了数组的深克隆;
阅读全文
0 0
- 数组的深clone
- 数组的clone()方法
- Java中数组的clone
- 数组克隆及对象的深、浅克隆(deep clone、shallow clone)
- 数组Clone
- Java中对于二维数组的clone
- 复制数组的时候加个clone
- 当Java的二维数组遇上clone
- 数组的拷贝及对象clone
- 对象的深clone
- Java中二维数组和一维数组的clone
- java中的clone()方法的研究---(8)如何编写正确的clone()方法:数组类型
- clone方法完成javascript中数组的复制
- C#数组中CopyTo()和Clone()的区别(转)
- 数组的拷贝(System.arraycopy和clone)
- js克隆对象、数组的常用方法【clone】
- js克隆对象、数组的常用方法【clone】
- Java中的克隆clone以及对数组的复制
- 【BZOJ2190】【数学】仪仗队 题解
- C++构造函数和析构函数中抛出异常的注意事项
- API-StringBuffer与StringBuilder
- 数据库索引
- 我的第一个博客
- 数组的深clone
- 【C语言】可变参数
- MyBatis传递多个参数
- 03.17 Linux环境变量及含义
- POJ 2626 Chess 笔记
- Qt随笔
- Flume 1.7.0 User Guide
- 手机登录FTP修改文件较好的软件
- leetcode628: Maximum Product of Three Numbers