对象数组深克隆

例如以下举例

var arr = [demo,demo,demo];
var newArr = deepClone(arr);
arr[0].arg = 2;
console.log(newArr[0].arg) // 1

实现代码如下:

/**
 * 深拷贝
 *
 * @param source Array/Object  对象/数组
 */
export function deepClone(source) {
    // 判断复制的目标是数组还是对象
    const targetObj = source.constructor === Array ? [] : {};
    // 遍历目标
    for (let keys in source) {
        if (source.hasOwnProperty(keys)) {
            // 如果值是对象,就递归一下
            if (source[keys] && typeof source[keys] === 'object') {
                targetObj[keys] = source[keys].constructor === Array ? [] : {};
                targetObj[keys] = deepClone(source[keys]);
            } else {
                // 如果不是,就直接赋值
                targetObj[keys] = source[keys];
            }
        }
    }
    return targetObj;
}
更新日期:
作者: qwding, 丁乾文