微信小程序,使用 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 ) )
所有 用已存在的值赋值都有可能出先该问题,不管是 数组还是单纯的字符串,赋值前最好都转下