cloneDeepWith
指定されたオブジェクトをディープクローンします。
cloneValue 関数を使用してディープクローンの方法を調整できます。この関数は現在の値 value、プロパティ名 key、全体のオブジェクト obj を引数として受け取ります。関数が値を返すと、その値が使用され、undefined を返すとデフォルトの方法でクローンされます。
インターフェース
typescript
function cloneDeepWith<T>(
obj: T,
cloneValue: (value: any, key: PropertyKey | undefined, object: T | undefined, stack: Map<any, any>) => any
): T;パラメータ
obj(T): クローンするオブジェクト。cloneValue((value: any, key: PropertyKey | undefined, obj: T, stack: Map<any, any>) => any): 値をクローンする方法を示す関数。デフォルトの方法を使用せずに値をクローンして返すことができます。undefinedを返すと、デフォルトの方法で値がクローンされます。value: 現在クローンされている値。key: 現在クローンされている値のプロパティ名。obj: クローンする全体のオブジェクトobj。stack: 循環参照を処理するための内部スタック(Map)。
戻り値
(T): 指定されたオブジェクトのディープクローン。
例
typescript
// Clone a primitive value
const num = 29;
const clonedNum = cloneDeepWith(num);
console.log(clonedNum); // 29
console.log(clonedNum === num); // true
// Clone an object with a customizer
const obj = { a: 1, b: 2 };
const clonedObj = cloneDeepWith(obj, value => {
if (typeof value === 'number') {
return value * 2; // Double the number
}
});
console.log(clonedObj); // { a: 2, b: 4 }
console.log(clonedObj === obj); // false
// Clone an array with a customizer
const arr = [1, 2, 3];
const clonedArr = cloneDeepWith(arr, value => {
return value + 1; // Increment each value
});
console.log(clonedArr); // [2, 3, 4]
console.log(clonedArr === arr); // false
