小程序中array.push(object)添加的数组元素是引用对象
发布于 6 年前 作者 dengxiulan 13607 次浏览 来自 问答

改变object的内容,之前添加的数组元素也被修改,达不到我想要的效果

代码:

        let myobject={

          hasshop:true,

          selectStore:true,

          cart:[],

        };

        for(let i = 0; i < mydata.shop_array.length;i++){

          myobject.name=mydata.shop_array[i];

          for (let j = 0; j < mydata["" + mydata.shop_array[i] +""].length;j++){

            let mycart = mydata["" + mydata.shop_array[i] + “”][j];

            mycart.selected=true;

            myobject.cart.push(mycart);

          }

          myarray.push(myobject);

        }

      },

4 回复

谢谢,发出来的时候也刚好想到了

push了以后对象置空

对象置空不行,因为在js中直接对对象赋值是浅拷贝,是引用原对象的值,你对对象进行操作,数组的值也会被改变,解决方法是在循环内部定义一个对象,深拷贝原对象,再将新定义的对象push到数组中去

这是 JS 语言本身的特性,如果不想数组元素被修改,可以在 push 时将该对象拷贝一份。

回到顶部