面试合集-手写一版深拷贝

313 阅读1分钟

深拷贝实现,代码很简单,基本覆盖大多数场景

const clone = require('shallow-clone');
const typeOf = require('kind-of');
const isPlainObject = require('is-plain-object');

function deepCopy(value) {
    switch (typeOf(value)) {
        case 'object':
            return deepCopyObj(value);
        case 'array':
            return deepCopyArr(value);
        default:
            return clone(value);
    }
}
function deepCopyObj(value) {
    if (isPlainObject(value)) {
        var result = new value.constructor();
        for (key in value) {
            if (value.hasOwnProperty(key)) {
                result[key] = deepCopy(value[key]);
            }
        }
        return result;
    }
    return value;
    
}
function deepCopyArr(value) {
    var result = new value.constructor(value.length);
    for (var i = 0; i < value.length; i++) {
        result[i] = deepCopy(value[i]);
    }
    return result;
}
module.exports = deepCopy;