一个列表赋值给两个列表变量后,其中一个列表元素改变,另一个也会改变(浅拷贝)

微信小程序,使用 setData 给两个列表变量赋值同一个数据时,当其中一个列表变量发生改变,另外一个变量也会随之改变,例如

wx.request({
    url: app.url + 'api/getSelect',
    header: {
        'Content-Type': 'application/x-www-form-urlencode;charset=utf-8',
        'token': app.globalData.token
    },
    success: function (res) {
        if (res.data.code == 0) {
            that.setData({
                loadPortList:  res.data.list,
                unloadPortList:  res.data.list,
            })
        } else {
            wx.showToast({
                title: res.data.msg,
                icon: 'none',
                duration: 2000
            })
            setTimeout(function () {

                wx.navigateBack({
                    delta: 1,
                })
            }, 2000);
        }
    }
});

    同时给 loadPortList 和 unloadPortList 赋值了数据,但是在修改 loadPortList 的时候 unloadPortList也会同时修改,

    这是因为 之类的赋值  js 仅仅做了浅拷贝,只是赋值了引用,所以在改变一个列表变量的时候改变的是元数据,而

    这两个指向元数据的变量 就会同时改变

    解决办法:

    使用 json.stringify  和 json.parse 重新赋值一个新的 变量list


wx.request({
    url: app.url + 'api/getSelect',
    header: {
        'Content-Type': 'application/x-www-form-urlencode;charset=utf-8',
        'token': app.globalData.token
    },
    success: function (res) {
        if (res.data.code == 0) {
            let loadPortList =  res.data.list;
            let listTemp = JSON.stringify(loadPortList);
            let unloadPortList = JSON.parse(listTemp);
            that.setData({
                loadPortList: loadPortList,
                unloadPortList: unloadPortList,
            })
        } else {
            wx.showToast({
                title: res.data.msg,
                icon: 'none',
                duration: 2000
            })
            setTimeout(function () {

                wx.navigateBack({
                    delta: 1,
                })
            }, 2000);
        }
    }
});

或者 再简单一点 

B = JSON.parse( JSON.stringify( A ) )

所有 用已存在的值赋值都有可能出先该问题,不管是 数组还是单纯的字符串,赋值前最好都转下

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值