收藏
回答

数组复制后setData疑问

dataList赋值给CA后,再修改dataList的一个值,再打印CA,CA跟着改变了。是什么原因。如何让CA不跟着dataList改变。


wxml代码如下:


<view wx:for="{{dataList}}" wx:key="{{unique}}" bindtap="test">{{item.val}}</view>


js代码如下:

var ca = "";

Page({

data: {

dataList:[

{ name: '1', val: '1' },

{ name: '2', val: '2' },

],

},

onLoad: function (options) {

ca = this.data.dataList;

console.log(ca);

},    

test:function(e){

ca = this.data.dataList;

console.log(ca)

var d = "dataList[0].name";          

this.setData({

[d]:3,

})

console.log(ca)

}

})


回答关注问题邀请回答
收藏

3 个回答

  • 松
    2019-01-22

    深拷贝一下 ca = JSON.parse(JSON.stringify(this.data.dataList))


    2019-01-22
    有用 1
    回复
  • 微盟
    微盟
    2019-01-29

    因为两者指向的是同一个内存地址,JSON.parse(JSON.stringify())虽然可以实现楼主需求,但是该方法也存在缺陷,建议楼主学习一下JS内存调用机制与对象深度拷贝


    2019-01-29
    有用
    回复
  • !!!Σ(っ°Д°;)っ
    !!!Σ(っ°Д°;)っ
    2019-01-22

    JSON.parse(JSON.stringify([you object/array]));

    2019-01-22
    有用
    回复 1
    • !!!Σ(っ°Д°;)っ
      !!!Σ(っ°Д°;)っ
      2019-01-22

      这应该是写法最简单的深拷贝了吧

      2019-01-22
      1
      回复
登录 后发表内容