js 深拷贝四种方法


第一种:JSON.stringify()
let obj = {
username:admin,
password:"123456"
}

//先转为json格式字符,再转回来
let newObj = JSON.parse(JSON.stringify(obj));

obj.password = MD5(obj.password);
console.log(newObj.password); //输出 123456
第二种:使用第三方库lodash中的cloneDeep()方法
import lodash from 'lodash';

let obj = {
username:admin,
password:"123456"
}

const newObj = lodash.cloneDeep(obj);

obj.password = MD5(obj.password);
console.log(newObj.password); //输出 12345
第三种:JQuery的extend()方法进行深拷贝
let obj = {
username:admin,
password:"123456"
}


let newObj= $.extend(true, {}, obj); //拷贝完成

obj.password = MD5(obj.password);
console.log(newObj.password); //输出 12345

第四种:递归方式
//函数拷贝
let obj = {
username:admin,
password:"123456"
}
const setObj = (obj) => {
//变量先置空
let newobj = null;

//判断是否需要继续进行递归
if (typeof (obj) == 'object' && obj !== null) {
newobj = obj instanceof Array ? [] : {};
//进行下一层递归克隆
for (var i in obj) {
newobj[i] = setObj(obj[i])
}
}else {
newobj = obj
}
return newobj
}

var newObj = setObj(obj)

obj.password = MD5(obj.password);
console.log(newObj.password); //输出 12345
posted @ 2022-10-28 10:16  李笑吅  阅读(2467)  评论(0编辑  收藏  举报