diff --git a/snippets/deepClone.md b/snippets/deepClone.md index 7d9905c0a..e7707918f 100644 --- a/snippets/deepClone.md +++ b/snippets/deepClone.md @@ -7,26 +7,20 @@ Use `Object.assign()` and an empty object (`{}`) to create a shallow clone of th Use `Object.keys()` and `Array.forEach()` to determine which key-value pairs need to be deep cloned. ```js + const deepClone = obj => { -if (Array.isArray(obj)){ - let arr = []; - obj.forEach( - (i,v) => (arr[i] = typeof v === 'object' ? deepClone(v) : v) - ) - return arr; -}else { let clone = Object.assign({}, obj); Object.keys(clone).forEach( key => (clone[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]) ); - return clone; -} + return Array.isArray(obj) ? (clone.length = obj.length) && Array.from(clone) : obj; }; ``` ```js + const a = { foo: 'bar', obj: { a: 1, b: 2 } }; const b = deepClone(a); // a !== b, a.obj !== b.obj ``` diff --git a/test/deepClone/deepClone.js b/test/deepClone/deepClone.js index 33d00a82c..f613e5660 100644 --- a/test/deepClone/deepClone.js +++ b/test/deepClone/deepClone.js @@ -1,16 +1,8 @@ const deepClone = obj => { -if (Array.isArray(obj)){ -let arr = []; -obj.forEach( -(i,v) => (arr[i] = typeof v === 'object' ? deepClone(v) : v) -) -return arr; -}else { let clone = Object.assign({}, obj); Object.keys(clone).forEach( key => (clone[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]) ); -return clone; -} +return Array.isArray(obj) ? (clone.length = obj.length) && Array.from(clone) : obj; }; module.exports = deepClone; \ No newline at end of file