mirror of
https://github.com/toss/es-toolkit.git
synced 2024-12-11 08:54:07 +03:00
1.7 KiB
1.7 KiB
cloneDeep
Creates a deep copy of the given object.
Signature
function cloneDeep<T>(obj: T): T;
Parameters
obj
(T
): The object to be copied.
Returns
(T
): A deep copy of the given object.
Examples
const num = 29;
const clonedNum = cloneDeep(num);
console.log(clonedNum); // 29
console.log(clonedNum === num); // true
const arr = [1, 2, 3];
const clonedArr = cloneDeep(arr);
console.log(clonedArr); // [1, 2, 3]
console.log(clonedArr === arr); // false
const obj = { a: 1, b: 'es-toolkit', c: [1, 2, 3] };
const clonedObj = cloneDeep(obj);
console.log(clonedObj); // { a: 1, b: 'es-toolkit', c: [1, 2, 3] }
console.log(clonedObj === obj); // false
// Nested objects and arrays
const nestedObj = { a: { b: { c: 'deep' } }, d: [1, 2, { e: 'nested' }] };
const clonedNestedObj = cloneDeep(nestedObj);
console.log(clonedNestedObj); // { a: { b: { c: 'deep' } }, d: [1, 2, { e: 'nested' }] }
console.log(clonedNestedObj === nestedObj); // false
console.log(clonedNestedObj.a === nestedObj.a); // false
console.log(clonedNestedObj.d === nestedObj.d); // false
console.log(clonedNestedObj.d[2] === nestedObj.d[2]); // false
Read-only properties
When you clone an object that has read-only properties defined by getters, the values produced by those getters will be included in the new copied object.
const source = {
get value() {
return 3;
},
};
const cloned = cloneDeep(source);
// cloned is now { value: 3 }
Demo
::: sandpack
import { cloneDeep } from 'es-toolkit/object';
const original = { a: { b: { c: 'deep' } }, d: [1, 2, { e: 'nested' }] };
const cloned = cloneDeep(original);
console.log(cloned);
console.log(original !== cloned);
:::