MST

星途 面试题库

面试题:JavaScript多维数组复杂操作的极致优化

有一个不规则的多维数组,其维度和元素数量不确定,数组结构类似嵌套对象(例如:[1, [2, {sub: [3, 4]}], 5])。要求编写一个高性能的函数,能够深度克隆这个数组,同时处理循环引用的情况(如果存在),并且在克隆过程中对每个数字元素进行平方操作。请详细说明优化思路以及编写完整的JavaScript代码。
46.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

优化思路

  1. 使用WeakMap处理循环引用WeakMap用于存储已经克隆过的对象(包括数组),避免重复克隆导致无限循环。
  2. 深度克隆:采用递归方式对多维数组进行深度克隆,遇到对象或数组时继续递归克隆,遇到其他类型直接返回。
  3. 平方操作:在克隆过程中,若遇到数字类型的元素,对其进行平方操作。

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);