js 当两个字段使用的同一个数组后,当其中一个数组变化了,另外一个数组也会收到影响。
this.list = res.data;
this.list2 = res.data;
var data = {
sorCount: 0,
sensorTypeKey: '0',
sensorList: [],
sensorTypeVal: '全部'
}
this.list2.unshift(data); list 和 list2数据独立 不彼此影响
在JavaScript中,对象和数组是通过引用进行赋值和传递的。当你执行 this.list2 = res.data;
后, list2
和 res.data
其实指向的是同一块内存地址,也就是说他们其实是同一个对象。所以对 list2
的修改会影响到 res.data
,也就影响到 list
。
解决这个问题的方式是进行深拷贝,创建一个完全独立的副本。这样,对一个数组的修改就不会影响到另一个数组。
this.list = JSON.parse(JSON.stringify(res.data));
this.list2 = JSON.parse(JSON.stringify(res.data));
var data = {
sorCount: 0,
sensorTypeKey: '0',
sensorList: [],
sensorTypeVal: '全部'
}
this.list2.unshift(data);
在这段代码中,我们使用 JSON.parse(JSON.stringify(res.data))
来创建一个 res.data
的深拷贝。这种方式简单易用,但是也有一些局限性。比如它不能处理函数和 undefined
,在遇到这两种类型的值时,它们会被忽略。如果你的数据中包含这些类型的值,你可能需要使用一些库函数,比如 lodash 的 _.cloneDeep
方法,来创建深拷贝。