在实例化对象时不会对数组中的数据进行劫持,所以改变数组中的数据时不会重新渲染页面;而对象中的数据是劫持过的;所以改变数据会重新渲染页面 ;、
解决方案:Vue.set(this.arr,0,200);
1.数组全量替换 this.arr = newArr;
2.自定义数组深拷贝函数:
function (obj) {
if (obj === null) return null
if (typeof obj !== 'object') return obj;
if (obj.constructor === Date) return new Date(obj);
if (obj.constructor === RegExp) return new RegExp(obj);
var newObj = new obj.constructor(); //保持继承链
for (var key in obj) {
if (obj.hasOwnProperty(key)) { //不遍历其原型链上的属性
var val = obj[key];
newObj[key] = typeof val === 'object' ? arguments.callee(val) : val; // 使用arguments.callee解除与函数名的耦合
}
}
return newObj;
}
3.JSON转换 普通数组
let newA JSON.parse(JSON.stringify(arr))