业务场景: 需要获取到详情页的数据,在编辑页展示.
如果直接this.detail = this.edit 那么在修改编辑页的数据的时候会把详情页的数据也改掉.
解决办法:把detail 的数据深拷贝过来
写法 this.edit = this.deepCopy(this.detail)
对象深拷贝:
方法一:
deepCopy (obj) {
var result = Array.isArray(obj) ? [] : {}
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object') {
result[key] = this.deepCopy(obj[key])
} else {
result[key] = obj[key]
}
}
}
return result
}
方法二:
var copy = JSON.parse(JSON.stringify(person))
方法三:
const obj = { a: 1 };
const copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }
数组深拷贝:
方法一:
var arr1 = [1, 2, 3];
var arr2 = [];
for (var i = 0; i < arr1.length; i++) {
arr2.push(arr1[i]);
}
arr1[0] = 4;
console.log(arr1); //4, 2, 3
console.log(arr2); //1, 2, 3
方法二:
var arr2 = arr1.concat();
方法三:
var arr2 = arr1.slice(0);
方法四:
1 var arr1 = [1, 2, 3];
2 var [...arr2] = arr1;
3 arr1[0] = 4;
4 console.log(arr1); //4, 2, 3
5 console.log(arr2); //1, 2, 3