面试题答案
一键面试优化思路
- 使用
WeakMap
处理循环引用:WeakMap
用于存储已经克隆过的对象(包括数组),避免重复克隆导致无限循环。 - 深度克隆:采用递归方式对多维数组进行深度克隆,遇到对象或数组时继续递归克隆,遇到其他类型直接返回。
- 平方操作:在克隆过程中,若遇到数字类型的元素,对其进行平方操作。
JavaScript代码
function deepCloneAndSquare(arr) {
const visited = new WeakMap();
function clone(obj) {
if (typeof obj!== 'object' || obj === null) {
return typeof obj === 'number'? obj * obj : obj;
}
if (visited.has(obj)) {
return visited.get(obj);
}
let result;
if (Array.isArray(obj)) {
result = [];
for (let i = 0; i < obj.length; i++) {
result.push(clone(obj[i]));
}
} else {
result = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = clone(obj[key]);
}
}
}
visited.set(obj, result);
return result;
}
return clone(arr);
}
你可以使用以下方式调用这个函数:
const originalArray = [1, [2, {sub: [3, 4]}], 5];
const clonedArray = deepCloneAndSquare(originalArray);
console.log(clonedArray);