浅拷贝与深拷贝的使用场景

一. 浅拷贝

let arr=[1,2,3,4]

let getData=arr;

getData.splice(0,1);//当强制删除其中某一个值时arr也被删除了

console.log(arr);//[2,3,4]

console.log(getData);//[2,3,4]

//问题:修改getData数组时,arr的数组不发生变化

let getData=Object.assign([],arr);

getData.splice(0,1)

console.log(arr);//[1,2,3,4]

console.log(getData);//[2,3,4]

二.深拷贝当一个数组中的对象发生变化时,则被建立引用关系接收的值也会发生变化

        //当一个数组中的对象发生变化时,则被建立引用关系接收的值也会发生变化
            handlePClickBefore(valOut){
                console.log('传进来的下标');
                console.log(valOut.sortId);
                //获取上一级的下标的内容,preLevel接收此对象的值建立了引用关系,
                当所引用的对象this.controllerZyCount发生变化时
                preLevel也会发生变化
                let preLevel=  this.controllerZyCount[valOut.sortId-1-1];
                //获取当前的下标的内容
                let getObject=this.controllerZyCount[valOut.sortId-1];
                this.controllerZyCount.splice(valOut.sortId-1,1, preLevel );
                this.controllerZyCount.splice(valOut.sortId-1-1,1,getObject);
                console.log('插入后');
                console.log(this.controllerZyCount);
                console.log(getObject['zyName']);
                //此时preLevel的值是正常的
                console.log( preLevel ['zyName']);
                console.log(this.controllerZyCount[valOut.sortId - 1]['zyName']);
                console.log(this.controllerZyCount[valOut.sortId - 1 - 1]['zyName']);
                this.controllerZyCount[valOut.sortId-1]['zyName']=getObject['zyName'];
                this.controllerZyCount[valOut.sortId-1]['sortId']=getObject['sortId'];
                //等到修改controllerZyCount[valOut.sortId-1]中的值时,preLevel发生了变化
                console.log( preLevel ['zyName']);
                this.controllerZyCount[valOut.sortId-1-1]['zyName']=preLevel.zyName;
                this.controllerZyCount[valOut.sortId-1-1]['sortId']= preLevel.sortId;
 
            },

2.解决以上问题的方式用深拷贝解决

            //上移
            handlePClickBefore(valOut){
                console.log('传进来的下标');
                console.log(valOut.sortId);
                //获取上一级的下标的内容
                let preLevel= JSON.stringify(this.controllerZyCount[valOut.sortId-1-1]);
                // let preLevelSortId=this.controllerZyCount[valOut.sortId-1-1]['sortId'];
                // let preLevelZyName=this.controllerZyCount[valOut.sortId-1-1]['zyName'];
                //获取当前的下标的内容
                let getObject=this.controllerZyCount[valOut.sortId-1];
                this.controllerZyCount.splice(valOut.sortId-1,1,JSON.parse(preLevel));
                this.controllerZyCount.splice(valOut.sortId-1-1,1,getObject);
                console.log('插入后');
                console.log(this.controllerZyCount);
                console.log(getObject['zyName']);
                console.log(JSON.parse(preLevel)['zyName']);
                console.log(this.controllerZyCount[valOut.sortId - 1]['zyName']);
                console.log(this.controllerZyCount[valOut.sortId - 1 - 1]['zyName']);
                this.controllerZyCount[valOut.sortId-1]['zyName']=getObject['zyName'];
                this.controllerZyCount[valOut.sortId-1]['sortId']=getObject['sortId'];
                console.log(JSON.parse(preLevel)['zyName']);

                this.controllerZyCount[valOut.sortId-1-1]['zyName']=JSON.parse(preLevel).zyName;
                this.controllerZyCount[valOut.sortId-1-1]['sortId']=JSON.parse(preLevel).sortId;
                this.$set(this.controllerZyCount);
                console.log('赋值后');
                console.log(this.controllerZyCount);
            },

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路光.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值