深拷贝示例
// 增强版深拷贝 (支持Set/循环引用)
export const enhancedDeepClone = (obj, cache = new WeakMap()) => {
// 基础类型直接返回
if (obj === null || typeof obj !== 'object') return obj;
// 循环引用检测
if (cache.has(obj)) return cache.get(obj);
// 特殊对象处理
const constructor = obj.constructor;
let clone;
switch (constructor) {
case Date:
clone = new Date(obj);
break;
case Map:
clone = new Map(Array.from(obj, ([k, v]) => [k, enhancedDeepClone(v, cache)]));
break;
case Set:
clone = new Set(Array.from(obj, v => enhancedDeepClone(v, cache)));
break;
case RegExp:
clone = new RegExp(obj);
break;
default:
clone = Array.isArray(obj) ? [] : Object.create(Object.getPrototypeOf(obj));
}
// 缓存当前对象防止循环引用
cache.set(obj, clone);
// 递归拷贝属性
Reflect.ownKeys(obj).forEach(key => {
clone[key] = enhancedDeepClone(obj[key], cache);
});
return clone;
};
// 增强版空值过滤 (可配置)
export const flexibleFilter = (obj, options = {}) => {
const {
filterNull = true,
filterUndefined = true,
filterEmptyString = true
} = options;
return Object.fromEntries(
Object.entries(obj).filter(([_, v]) => {
if (filterNull && v === null) return false;
if (filterUndefined && v === undefined) return false;
if (filterEmptyString && v === '') return false;
return true;
})
);
};
object类型包含:数组、函数、类、对象字面量、Date 等(需结构化数据)。- 非
object类型 = 基本类型(string,number, 等) + 特殊类型(any,void, 等) + 字面量类型。











Comments 1 条评论
博主 匿名
你好,我是猛男A