一、使用lodash包的方法
1.安装lodash包
$ npm i -g npm
$ npm i --save lodash
2.在angular中引用lodash包
在ts组件中引入loadash包
import * as _ from 'lodash';
3.使用cloneDeep方法深克隆
var obj = [{name: '张三' }, { age: 18 }];
var newObj= _.cloneDeep(objects);
console.log(newObj[0] === objects[0]); //false
//证明引用地址不相同 为深克隆
二、使用遍历数组/对象的方法深克隆
for … in 可以用来遍历任何一个对象,它会将该对象上的所有属性全部遍历出来,包括原型链上的属性
由于可以遍历出原型链上的属性,所以需要使用 hasOwnProperty 这个方法来判断到底是不是这个对象自身的属性
deepClone1(obj: any) {
//判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝
var objClone: any = Array.isArray(obj) ? [] : {};
//进行深拷贝的不能为空,并且是对象或者是
if (obj && typeof obj === 'object') {
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
if (obj[key] && typeof obj[key] === 'object') {
objClone[key] = this.deepClone1(obj[key]);
} else {
objClone[key] = obj[key];
}
}
}
}
return objClone;
}