微信小程序修改浅拷贝对象,为何不会同步修改原对象?

发布于 2022-09-13 01:28:38 字数 2065 浏览 25 评论 0

各位大佬,我在做一个编辑购物车商品的逻辑,修改购物车前,先备份一下修改前的状态,但是在修改后保存时发现对 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

守不住的情 2022-09-20 01:28:38

let cart = this.data.cart => cart 指向 this.data.cart

cart = cart.CARTBAK => cart 指向 this.data.cart.CARTBAKthis.data.cart 不变

相关讨论:https://segmentfault.com/q/10...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文