vue中使用data中的数据a给赋值给另外一个变量b,改变a或b的值,另一个对象也变化的解决方法

组件中data
      formValidate: {
        IsTelUntrue: 'true',
        ChannelValue: ['1', '2'],
        IsSatisfyValue: '1',
        EvaluateValue: '1'
      }
问题
我在提交之前,需把ChannelValue数据改为,将其改为所有数组元素相加的值。但是ChannelValue本身的数据类型只能为数组。因此我需要一个中间变量transformData,在不改变formValidate的同时,将formValidate数据中ChannelValue处理后赋值给transformData。不能简单的使用(其中arraySum为数组元素求和函数,返回结果为求和的值)

const transformData = this.formValidate;
transformData.ChannelValue=arraySum(transformData.ChannelValue);

这样会导致 formValidate中的值还是会发生改变!

解决
如果我们的值是固定值,写死的,就这么做

const transformData ={};
transformData.ChannelValue=arraySum(this.formValidate.ChannelValue);
transformData.EvaluateValue = this.formValidate.EvaluateValue;
transformData.IsSatisfyValue = this.formValidate.IsSatisfyValue;
transformData.IsTelUntrue = this.formValidate.IsTelUntrue;

最完美的解决方法
数组、对象、值都适用
参考

在vue中 this.A = this.B,没有进行深层赋值,只是把this.A的地址指向了与this.B相同的地址,所有对于A的修改会影响到B
解决相互影响的思路是在this.A必须是新建的一个对象,这样才能保证不被指向同一地址,属性修改不会相互影响。
 this.A=JSON.parse(JSON.stringify(this.B));


将对象转成字符串剔除对象属性后,再转换成对象赋值,这样能解决指向相同地址修改会相互影响的问题。里面的this.A= JSON.parse(JSON.stringify(this.B)); 如果是直接this.A= this.B的话会把 this.A替换为this.B然后再把this.B赋值给this.A相当于 this.A= this.A所以先转json字符串 再转数组 然后赋值给this.A这样不会相互影响

原文链接: https://blog.csdn.net/Gabriel_wei/article/details/90482913

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值