克隆clone
es6之前
function clone (obj, deep) {
if (Array.isArray(obj)) {
if (deep) {
//深度克隆
var newArr = [];
for (var i = 0; i < obj.length; i++) {
newArr.push(this.clone(obj[i], deep));
}
return newArr;
}
else {
return obj.slice(); //复制数组
}
}
else if (typeof obj === "object") {
var newObj = {};
for (var prop in obj) {
if (deep) {
//深度克隆
newObj[prop] = this.clone(obj[prop], deep);
}
else {
newObj[prop] = obj[prop];
}
}
return newObj;
}
else {
//函数、原始类型
return obj; //递归的终止条件
}
}
es6之后
function objectClone(obj, deep = false) {
if (obj === null || typeof obj !== 'object') {
return obj; // 基本类型直接返回
}
if (Array.isArray(obj)) {
return deep
? obj.map(item => objectClone(item, deep)) // 深拷贝数组
: [...obj]; // 浅拷贝数组(使用展开运算符)
}
// 处理普通对象
const newObj = {};
for (const [key, value] of Object.entries(obj)) {
newObj[key] = deep ? objectClone(value, deep) : value; // 递归深拷贝或直接赋值
}
return newObj;
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Ruzenie
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果