数组复制后setData疑问
发布于 7 年前 作者 minqin 3188 次浏览 来自 问答

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 回复

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

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

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

回到顶部