微信小程序修改浅拷贝对象,为何不会同步修改原对象?
各位大佬,我在做一个编辑购物车商品的逻辑,修改购物车前,先备份一下修改前的状态,但是在修改后保存时发现对 cart
的修改并不能同步到 this.data.cart
详细代码请见 27-31 行。
Page({
edit: function (e) {
let cart = this.data.cart;
// 备份修改前的数据
let CARTBAK = JSON.parse(JSON.stringify(cart));
// 取消视口中的所有商品选中
cart.isEditing = !cart.isEditing;
if (cart.isEditing) {
// 编辑
console.log("开始编辑");
cart.CARTBAK = CARTBAK;
cart.isSelected = false;
cart.shops.forEach((shop, index) => {
shop.isSelected = false;
shop.goodList.forEach((good, index) => {
good.isSelected = false;
});
});
} else {
// 编辑结束
console.log("完成")
if(e.target.id === "confirmDelete"){
// 如果点的是 删除按钮,删除 备份数据里的商品
confirmDelete();
}
// ↓ 这一行可以修改成功
// this.data.cart = cart.CARTBAK;
console.log(cart.CARTBAK)
// ↓ 但是换成 cart 就不行
cart = cart.CARTBAK;
// cart 修改成功,this.data.cart 没有同步修改
console.log(cart, this.data.cart)
}
this.saveData();
function confirmDelete() {
for (let i = cart.shops.length - 1; i >= 0; i--) {
let goodList = cart.shops[i].goodList;
for (let j = goodList.length - 1; j >= 0; j--) {
let good = goodList[j];
// console.log(good)
if (good.isSelected) {
cart.CARTBAK.shops[i].goodList.splice(j, 1);
// console.log(good)
}
}
if (cart.shops[i].isSelected) {
cart.CARTBAK.shops.splice(i, 1);
}
}
}
},
saveData: function () {
this.setData({
cart: this.data.cart,
});
console.log("Saved")
}
})
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
let cart = this.data.cart
=>cart
指向this.data.cart
cart = cart.CARTBAK
=>cart
指向this.data.cart.CARTBAK
,this.data.cart
不变相关讨论:https://segmentfault.com/q/10...