博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于js拷贝对象的问题
阅读量:5116 次
发布时间:2019-06-13

本文共 1173 字,大约阅读时间需要 3 分钟。

在使用vue的时候遇到一个需求需要备份一个多维数组对象,用了好几种方法得到的结果都是相互连带影响的,无法做到在修改原数组的基础上,copy出一份为改动过的原数据,看了下网上各路大仙的套路,还是不能深信,还是自己动手看看最好了。

首先是例子1,假如是一个单纯简单的数组对象:

// ------------情况1------------    var arr = [0,1,2,3];        var arr1 = arr;    var arr2 = arr.slice(0);    var arr3 = JSON.parse(JSON.stringify(arr));    arr.push(4);    console.log(arr1);    console.log(arr2);    console.log(arr3);

结果是这样:

可以看到后两者很好的满足了我们的需求,没有收到影响。

然后是例子2,这是一个相对复杂的多维对象。

1 // ------------情况2------------ 2     var obj = [ 3         { a:'0'}, 4         { b:'1'}, 5         { c:'2'}, 6         {  7             d:[ 8                 { e:'3'}, 9                 { f:'4'},10                 { g:'5'},11             ]12         },13     ];14     var copy1 = obj;15     var copy2 = obj.slice(0);16     var copy3 = JSON.parse(JSON.stringify(obj));17 18     obj[3].d[2]['h'] = '6';19     console.log(copy1);20     console.log(copy2);21     console.log(copy3);

结果如图:

结果就有不同了,发现前两种方式都发生了改变,这是因为slice(),contact() 这类类似的方法只能对简单的数组对象进行拷贝,如果其中包含对象,就无法随人愿了,还是第三种坚挺;

因为,就js来说不管是array对象,json对象,其本身是引用类型,是指向其地址的,运用JSON解析成非引用类型的字符串变量,再反解析回来,所以结果令人满意,当然如果是像

php这种拥有&引用符号的,那就不用担心这个问题了。

转载于:https://www.cnblogs.com/harmonyHu/p/7371742.html

你可能感兴趣的文章
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
SDN第四次作业
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>
距离公式汇总以及Python实现
查看>>
一道不知道哪里来的容斥题
查看>>
Blender Python UV 学习
查看>>