English | 简体中文
一个超轻量级、高性能的 JavaScript 深克隆工具库,完美支持复杂对象和循环引用的克隆场景!
- 🚀 极致性能 - 优化的克隆算法,性能远超同类工具。
- 🛡️ 类型安全 - 完整的 TypeScript 支持,提供类型推断和代码提示。
- 🔄 循环引用检测 - 智能处理循环引用,避免栈溢出。
- 🎨 全类型支持 - 支持所有 JavaScript 数据类型,包括
Date
、RegExp
、Set
、Map
、TypedArray
等。 - 🧰 零依赖 - 无外部依赖,纯净实现。
- 📦 体积小巧 - 压缩后仅 ~2KB。
- 🔒 安全可靠 - 防止递归栈溢出,支持最大递归深度配置。
# 使用 npm
npm install dkopy
# 使用 yarn
yarn add dkopy
# 使用 pnpm
pnpm add dkopy
import dkopy from 'dkopy';
// 1️⃣ 基础深克隆
const cloned = dkopy(source);
// 2️⃣ 处理循环引用
const circular = { foo: { bar: {} } };
circular.foo.bar = circular;
const cloned = dkopy(circular); // ✅ 正确处理循环引用
- 💫 基础类型
- ✅
String
、Number
、Boolean
- ✅
null
、undefined
- ✅
- 📋 引用类型
- ✅
Object
、Array
- ✅
Date
、RegExp
- ✅
Map
、Set
- ✅
TypedArray
(如Uint8Array
、Int32Array
等) - ✅
ArrayBuffer
- ✅
function dkopy<T>(input: T, clonedMap?: Map<any, any>): T;
-
input
: 需要克隆的值。 -
clonedMap
: 用于记录已克隆对象的 Map(内部使用,通常无需手动传递)。
// 克隆复杂对象
const complex = {
date: new Date(),
regex: /test/g,
map: new Map([['key', 'value']]),
set: new Set([1, 2, 3]),
typed: new Int8Array([1, 2, 3]),
nested: { deep: { deeper: { value: 42 } } }
};
const cloned = dkopy(complex);
// ✅ 所有属性都被正确克隆!
使用 benchmark.js 在不同场景下的测试结果:
深克隆性能测试:
✨ dkopy: 681,261 ops/sec ±0.25% (94 runs sampled)
📊 lodash.cloneDeep: 254,535 ops/sec ±0.24% (94 runs sampled)
🚀 rfdc: 745,473 ops/sec ±0.31% (99 runs sampled)
-
dkopy
的性能是lodash.cloneDeep
的 2.68 倍。 -
dkopy
的性能接近rfdc
,仅相差约 8.6%。 -
dkopy
在大多数场景下表现优异,尤其是在处理复杂对象和循环引用时。
- Fork 本仓库
- 创建功能分支 (
git checkout -b feature/AmazingFeature
) - 提交更改 (
git commit -m 'Add some AmazingFeature'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 创建 Pull Request
MIT License © 2024-Present
⭐️ 如果这个项目对你有帮助,别忘了给它点个星!