js 深拷贝及浅拷贝

本文主要介绍了JavaScript中数组的浅拷贝和深拷贝。简单赋值和concat方法属于浅拷贝,更改其中一个数组,另一个也会改变。还分享了简单粗暴的深拷贝方法,更改一个数组值时另一个不会变,但该方法较消耗内存,此外还有其他深拷贝方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数组浅拷贝
在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份.

如下代码,如果只是简单才用赋值的方法,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生

var arr1 = ["red","yellow","black"];
var arr2 = arr1;
arr2[1] = "green";
console.log("数组的原始值:" + arr1 );
console.log("数组的新值:" + arr2);

测试结果发现两个数组的值均发生了改变

亦或者用concat:

var arr1 = ["red","yellow","black"];
var arr2 = [].concat(arr1);
arr2[1] = "green";
console.log("数组的原始值:" + arr1 );
console.log("数组的新值:" + arr2);

此时我们发现两个数组的值依旧发生了改变,得知concat也是对于数组的浅拷贝

一、数组深拷贝

1.分享一个简单粗暴的深拷贝方法:!!!

JSON.parse(JSON.stringify(arr))

于是我们在更改其中一个数组值得时候,另一个数组就不会发生改变了~
这个方法的缺点就是有些消耗内存

2.

copyObj:function (list) {
   var a = [];
     for(var i = 0;i<list.length;i++){
       let res = {}
       for (var key in list[i]) {
         res[key] = list[i][key]
       }
       a.push(res)
     }
     return a
   }

这个方法同样可以进行数组的深拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值