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

背景 

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

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

如果直接这样操作:

 var action1 =  res.data
 var action2 = res.data
        
 action1.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.data
        
 action1.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。

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

最近更新

  1. TCP协议是安全的吗?

    2024-06-16 02:12:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-16 02:12:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-16 02:12:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-16 02:12:04       18 阅读

热门阅读

  1. 2024.6.15

    2024-06-16 02:12:04       8 阅读
  2. 【LeetCode 5.】 最长回文子串

    2024-06-16 02:12:04       6 阅读
  3. Mac的m系列芯片安装虚拟机--简单流程

    2024-06-16 02:12:04       8 阅读
  4. git 如何拉取最新代码

    2024-06-16 02:12:04       6 阅读
  5. Nacos入门与实践

    2024-06-16 02:12:04       6 阅读
  6. 08:打印字符

    2024-06-16 02:12:04       5 阅读
  7. kubernetes部署dashboard

    2024-06-16 02:12:04       8 阅读
  8. go 协程

    go 协程

    2024-06-16 02:12:04      6 阅读