Skip to content

Commit 5e585d4

Browse files
committed
refactor(utils): rewrite deepClone
1 parent cbbb719 commit 5e585d4

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/utils.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,5 +169,25 @@ export const revertArrayChange = (arr: Array<any>, index: number, change: any):
169169
};
170170

171171
export const deepClone = (obj: Object): Object => {
172-
return JSON.parse(JSON.stringify(obj));
172+
if (realTypeOf(obj) === 'object') {
173+
const clone = { ...obj };
174+
for (const k in clone) {
175+
if (clone.hasOwnProperty(k)) {
176+
clone[k] = deepClone(clone[k]);
177+
}
178+
}
179+
return clone;
180+
}
181+
if (realTypeOf(obj) === 'array') {
182+
const clone = [...obj];
183+
clone.forEach((v, i) => {
184+
clone[i] = deepClone(v);
185+
});
186+
return clone;
187+
}
188+
if (realTypeOf(obj) === 'date') {
189+
return new Date(obj);
190+
}
191+
192+
return obj;
173193
};

0 commit comments

Comments
 (0)