// 判断是否是某类型
const isType = (obj, type) => {
if (typeof obj !== 'object') return false;
const typeString = Object.prototype.toString.call(obj);
let flag;
switch (type) {
case 'Array':
flag = typeString === '[object Array]';
break;
case 'Date':
flag = typeString === '[object Date]';
break;
case 'RegExp':
flag = typeString === '[object RegExp]';
break;
default:
flag = false;
}
return flag;
};
// 获取到正则修饰符
const getRegExp = re => {
var flags = '';
if (re.global) flags += 'g';
if (re.ignoreCase) flags += 'i';
if (re.multiline) flags += 'm';
return flags;
};
// 深度克隆
const deepClone = parent => {
// 旧对象 :新对象 map
let _map = new WeakMap();
const _clone = parent => {
if (parent === null) return null;
if (typeof parent !== 'object') return parent;
if(_map.get(parent)){
return _map.get(parent)
}
let newParent;
if (isType(parent, 'Array')) {
// 对数组做特殊处理
newParent = [];
} else if (isType(parent, 'RegExp')) {
// 对正则对象做特殊处理
newParent = new RegExp(parent.source, getRegExp(parent));
if (parent.lastIndex) newParent.lastIndex = parent.lastIndex;
} else if (isType(parent, 'Date')) {
// 对Date对象做特殊处理
newParent = new Date(parent.getTime());
} else {
// 处理对象原型
newParent = Object.create(parent.__proto__);
}
_map.set(parent, newParent);
for (let i in parent) {
// 递归
newParent[i] = _clone(parent[i]);
}
return newParent;
};
return _clone(parent);
};
简单实现深度克隆
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 广度优先搜索 (BFS) 是一种广泛运用在树或图这类数据结构中,遍历或搜索的算法。 该算法从一个根节点开始,首先访...
- 原文: https://makeoptim.com/deep-learning/collect-image-dat...
- Tensorflow框架的青铜级应用 任务描述 用两层神经网络实现一个二维平面内的回归任务,即给定数据集,设计模型...
- 在深度学习环境安装一文中,我们已经搭建了撸代码的基本环境。现在就可以来正式写代码了。我们今天的目标是模拟线性回归,...