数组对象的拷贝

31 篇文章 0 订阅

数组对象的拷贝

错误方式: 

let arr1 = [{isShow: true,value:testValue}];

let arr2 = [...arr1];// 采用es6解构赋值的方式

let listItems = [];

arr2.foreach( (item)=> {

if (item.isShow == true) {

let reg = RegExp(/Value/);

if (reg.exec(item.value)) {

item.value = item.value.split("V")[0];

}

listItems.push(item.value);

})

console.log("复制后的数组",arr2);

console.log("原数组",arr1);

//结果显示:原数组被污染
//原因: es6的解构赋值只对一维数组的操作,即只对基础类型的拷贝,无法拷贝引用类型。

正确的方式:
(1)深拷贝

deepCopy.js 里写的封装好的deepCopy,如下:

// 深拷贝

class DeepCopy {

deepCopy(arr) {

let copyArr = (arr.constructor === Array) ? [] : {}; // 判断是数组还是对象

for (let i in arr) {

if (typeof arr[i] === 'object') { // 判断是值类型还是引用类型

copyArr[i] = this.deepCopy(arr[i]); // 引用类型的话进行递归操作

} else {

copyArr[i] = arr[i]; // 值类型直接赋值

}

}

return copyArr;

}

}

 

var deepCopy = new DeepCopy();

export default deepCopy;

——————————————————————————

在组件里引用deepCopy.js  ,//放置的路径根据自己项目配置
我的项目路径: import deepCopy from "@/lib/deepCopy.js";

let arr1 = [{isShow: true,value:testValue}];

let copyCols = deepCopy.deepCopy(arr1);

copyCols.forEach(item => {

if (item.isShow == true) {

let reg = RegExp(/Value/);

if (reg.exec(item.value)) {

item.value = item.value.split("V")[0];

}

 listItems.push(item.value);

 }

 });

console.log("原数组",arr1); // 此时原数组未被污染

(2) 序列化和反序列化的方式

let arr1 = [{isShow: true,value:testValue}];

let colsString = JSON.stringify(arr1)

let colsArr = JSON.parse(colsString);

colsArr.forEach(item => {

if (item.isShow == true) {

let reg = RegExp(/Value/);

if (reg.exec(item.value)) {

item.value = item.value.split("V")[0];

}

listItems.push(item.value);

}

});

console.log("原数组",arr1); // 此时原数组未被污染

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值