问答题1187/1593实现深拷贝

难度:
2021-07-06 创建

参考答案:

1const cloneDeep1 = (target, hash = new WeakMap()) => { 2 // 对于传入参数处理 3 if (typeof target !== 'object' || target === null) { 4 return target; 5 } 6 // 哈希表中存在直接返回 7 if (hash.has(target)) return hash.get(target); 8 9 const cloneTarget = Array.isArray(target) ? [] : {}; 10 hash.set(target, cloneTarget); 11 12 // 针对Symbol属性 13 const symKeys = Object.getOwnPropertySymbols(target); 14 if (symKeys.length) { 15 symKeys.forEach(symKey => { 16 if (typeof target[symKey] === 'object' && target[symKey] !== null) { 17 cloneTarget[symKey] = cloneDeep1(target[symKey]); 18 } else { 19 cloneTarget[symKey] = target[symKey]; 20 } 21 }) 22 } 23 24 for (const i in target) { 25 if (Object.prototype.hasOwnProperty.call(target, i)) { 26 cloneTarget[i] = 27 typeof target[i] === 'object' && target[i] !== null 28 ? cloneDeep1(target[i], hash) 29 : target[i]; 30 } 31 } 32 return cloneTarget; 33} 34

最近更新时间:2021-07-07

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!