简单深拷贝
Posted auserroot
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单深拷贝相关的知识,希望对你有一定的参考价值。
let obj = c:1,d:()=>
obj_ = a:1,b:2
obj__ = a:()=>,b:()=>,c:1
_obj = [1,2,3,1]
_obj_= 1
// 深拷贝
// JSON.parse(JSON.stringify())
// 局限性:
// 他无法实现对函数 、RegExp等特殊对象的克隆
// 会抛弃对象的constructor,所有的构造函数会指向Object
// 对象有循环引用,会报错
let o = JSON.parse(JSON.stringify(obj))
console.log(o)//c:1
//遍历 递归
// 对数据类型做判断
const deepClone = (obj)=>
let o = //存结果
//判断是否为复杂类型(引用类型)
if(typeof obj === 'object' && obj !== null )
//数组处理
if(Array.isArray(obj))
o = [...obj]
//对象处理
for(let item in obj)
if(obj.hasOwnProperty(item))
o[item] = deepClone(obj[item])
else
o = ...obj
else
o = obj //普通类型
return o
// deepClone(obj)
console.log(deepClone(obj))// c: 1, d: [Function: d]
console.log(deepClone(obj_))// a: 1, b: 2
console.log(deepClone(obj__))// a: [Function: a], b: [Function: b], c: 1
console.log(deepClone(_obj))//[ 1, 2, 3, 1 ]
console.log(deepClone(_obj_))//1
//精简
const deepClone_simple = (obj) =>
let o = ;
//普通类型
(typeof obj !== 'object' || obj === null)&&(o = obj);
//复杂类型
//数组
Array.isArray(obj)&&(o = [...obj]);
for(let item in obj)
obj.hasOwnProperty(item)&&(o[item] = deepClone_simple(obj[item]));
return o;
以上是关于简单深拷贝的主要内容,如果未能解决你的问题,请参考以下文章