当前位置: 首页> 游戏> 手游 > 微信小程序中实现将数据库返回的数据对象res.data赋值给两个变量,并且这两个变量互不影响,改变一个变量中对象值的同时不影响另一个变量

微信小程序中实现将数据库返回的数据对象res.data赋值给两个变量,并且这两个变量互不影响,改变一个变量中对象值的同时不影响另一个变量

时间:2025/7/10 17:52:18来源:https://blog.csdn.net/weixin_57177381/article/details/139710141 浏览次数:0次

背景 

今天在做功能需求的时候,遇到一个问题,就是想把获取到数据库的数据res.data(res.data是对象),赋值给两个不同(包括值和地址)的变量action1和action2,其中一个变量需要将res.data中的时间格式化。

action1用于信息展示,action2用于原始数据后续数据库添加有用。

如果直接这样操作:

 var action1 =  res.datavar action2 = res.dataaction1.starttime = util.formatTime(new Date(action1.starttime))action1.endtime = util.formatTime(new Date(action1.endtime))that.setData({action1,action2,})

实际上,action1在时间格式化后,虽然“看起来”两个变量不一样了,其实action1和action2是一样的,因为res.data为对象是引用类型,action1和action2保存的是栈内存中的地址,无论改变action1还是action2,都是改变栈内存地址所指向的堆内存中的数据。那如何解决呢?其实用js深拷贝就能解决

解决方案

为了实现目标,需要创建两个独立的变量,使它们不共享同一个引用。你可以使用深拷贝来创建res.data的副本

利用深拷贝中最简单的方式,对res.data进行序列化JSON.parse(JSON.stringify(res.data))

 var action1 =   JSON.parse(JSON.stringify(res.data))var action2 = res.dataaction1.starttime = util.formatTime(new Date(action1.starttime))action1.endtime = util.formatTime(new Date(action1.endtime))that.setData({action1,action2,})

使用 JSON.parse(JSON.stringify(res.data)) 方法创建action1的深拷贝,这样action1和action2就是两个独立的对象,修改action1不会影响action2。

当然对于解决功能上问题还有其它解决方案,以前没有用到,现在总结一波,如果这篇文章对您有所帮助,麻烦给个小🌹吧!

关键字:微信小程序中实现将数据库返回的数据对象res.data赋值给两个变量,并且这两个变量互不影响,改变一个变量中对象值的同时不影响另一个变量

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: