1.运用递归方法进行深度拷贝
//1 .原生的方法写深度拷贝
function deepClone(obj) {
// 先判断是数组还是对象,好声明变量接收
var params = Array.isArray(obj) ? [] : {};
for (key in obj) {
if (obj[key] && typeof obj[key] == "object") {
params[key] = deepClone(obj[key]);
} else {
params[key] = obj[key];
}
}
return params;
}
//以下是测试用的数据
var a = {
name: "zjam",
obj: {
am: "zaofnd",
dvd: "ddddd",
},
};
var b = deepClone(a);
a.obj.am = "早上";
console.log(a);
console.log(b);
2.JSON.对象的方法实现(常用)
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
//以下是测试数据
var a = {
name: "zjam",
obj: {
am: "zaofnd",
dvd: "ddddd",
},
};
var b = deepClone(a);
a.obj.am = "早上";
console.log(a);
console.log(b);
3.第三方插件Lodash实现深拷贝(方便)
<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
var a = {
name: "我是a中的数据",
obj: {
name: "张三",
age: "40",
},
};
var b = _.cloneDeep(a, {
obj: {
name: "李四",
age: "50",
sex: "男",
},
});
a.obj.name = "王二";
console.log(a);
console.log(b);
4.用的jqery里面的extend方法;
var a = {
name: "zjam",
obj: {
am: "zaofnd",
dvd: "ddddd",
},
};
var b = $.extend(true, {}, a); // 第一个参数true为深拷贝,第二个参数为目标对象,第三个参数为源对象即你用拷贝那个数据
a.obj.am = "早上";
console.log(a);
console.log(b);
以供参考,有更好的方法,请告知