首页 > 其他分享 >js 深拷贝的四种方式

js 深拷贝的四种方式

时间:2022-10-28 06:44:05浏览次数:81  
标签:password obj lodash newObj let 拷贝 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;
}

第一种:递归方式(推荐,项目中最安全最常用)

使用递归的方式进行对象(数组)的深拷贝

  1.    
  2.   //函数拷贝
  3.   const copyObj = (obj = {}) => {
  4.   //变量先置空
  5.   let newobj = null;
  6.    
  7.   //判断是否需要继续进行递归
  8.   if (typeof (obj) == 'object' && obj !== null) {
  9.   newobj = obj instanceof Array ? [] : {};
  10.   //进行下一层递归克隆
  11.   for (var i in obj) {
  12.   newobj[i] = copyObj(obj[i])
  13.   }
  14.   //如果不是对象直接赋值
  15.   } else newobj = obj;
  16.    
  17.   return newobj;
  18.   }
  19.    
  20.    

上方函数的使用方式

标签:password,obj,lodash,newObj,let,拷贝,js,四种
From: https://www.cnblogs.com/lixiaosong/p/16834537.html

相关文章

  • 快速初始化golang和nodejs
    文档说明:只记录关键地方;试验环境:webIDEvscode网页版code-server目标:webIDE终端里能快速使用golang,nodejs,python3,pip3test!-f/etc/apt/source.list.sa......
  • JavaScript 手写深拷贝
    深拷贝深拷贝就是要拷贝的对象内的所有引用类型的属性进行完整的拷贝;也就是说拷贝出来的对象和原对象之间没有任何数据是共享的,所有的东西都是自己独占的一份;三步实现深......
  • json类型数据取出想要的部分
    因为才疏学浅,只能用很笨的方法。以下是我拿到的数据的json型数据。{"result":{"ingredient":{"result":[{"score":0.9999989,"name":"香蕉"},{"score":7.754284E-7,"name......
  • 【JS】函数的prototype属性
     函数中的prototype属性        1.函数中prototype属性的值是一个对象或null,默认只有一个constructor属性指向函数本身。        2.......
  • 深拷贝和浅拷贝的区别
    浅拷贝:实现了Cloneable接口,重写了clone(),直接调用父类Object的clone()方法深拷贝:Person类的clone()方法进行修改,连带着把Person对象内部的Address对象一起复制还可以通......
  • 如何用webgl(three.js)搭建一个3D库房,3D仓库3D码头,3D集装箱,车辆定位,叉车定位可视
    序又是快两个月没写随笔了,长时间不总结项目,不锻炼文笔,一开篇,多少都会有些生疏,不知道如何开篇,如何写下去。有点江郎才尽,黔驴技穷的感觉。写随笔,通常三步走,第一步,......
  • 力扣(leetcode) 69. x 的平方根 (四种方法解决,总有一种是你会的~)
    题目在这:​​https://leetcode-cn.com/problems/sqrtx/​​题目分析:题目还是挺好理解的,就是给你一个数,问你它是由谁平方得来的。比如给你4,2的平方等于4。所以返回2。而8......
  • JSONObject没有parseObject方法
    一定是你引入的包不对,你把上面的import删掉,重新导入包就可以了。在这之前加入依赖:`net.sf.json-libjson-lib2.4<dependency><groupId>com.alibaba</groupId>......
  • [JSOI2010]连通数
    传送地址:https://www.luogu.com.cn/problem/P4306题目描述度量一个有向图连通情况的一个指标是连通数,指图中可达顶点对个的个数。如图顶点 11 可达 1,2,3,4,51......
  • js正则表达式
    正则表达式概述:正则表达式是运用于验证一种表达式,他在js中是一个对象,被称为正则对象,对应的正则对象存在对应相关的元字符。我只需要了解相关元字符及对应的可以书写一些......