收藏
回答

小程序中array.push(object)添加的数组元素是引用对象

改变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 个回答

  • 信笺
    信笺
    2017-10-13

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

    2017-10-13
    有用
    回复
  • 鎏嫣宫守护
    鎏嫣宫守护
    2017-10-13

    push了以后对象置空

    2017-10-13
    有用
    回复
  • 信笺
    信笺
    2017-10-13

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

    2017-10-13
    有用
    回复
  • 白开水
    白开水
    2017-10-13

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

    2017-10-13
    有用
    回复
登录 后发表内容