手写深拷贝

227 阅读1分钟

js可以使用以下方式实现深拷贝:

JSON.parse(JSON.stringify(obj))// 不支持值为undefined、函数和循环引用的情况

手写深拷贝实现如下:

function deepClone(obj) {
    let cloneObj;
    if (obj) {
        if (typeof obj !== 'object') {
            cloneObj = obj;
        } else {
            cloneObj = Array.isArray(obj) ? [] : {};
            for (let key in obj) {
                if (obj.hasOwnProperty(key)) {
                    if (obj[key] && typeof obj[key] === 'object') {
                        cloneObj[key] = deepClone(obj[key]);
                    } else {
                        cloneObj[key] = obj[key];
                    }
                }
            }
        }
    }

    return cloneObj;
}

console.log(
    deepClone({
        x: 1,
        y: [5, 6, 7],
        z: {
            a: 0,
            b: 1
        }
    })
);