Javascript实现对象深拷贝

一笑奈何 提交于 2020-04-28 19:46:09

1.Object.assign

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign(target, source);

console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }

console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }

2. jQuery.extend 或 lodash

$.extend( true, object1, object2 ); // 深拷贝
$.extend( object1, object2 );  // 浅拷贝
var objects = [{ 'a': 1 }, { 'b': 2 }];
var deep = _.cloneDeep(objects);

3.自定义方法clone
function checkType(target) {
    return Object.prototype.toString.call(target).slice(8,-1)
}
//递归遍历对象/数组元素。实现深拷贝
function clone(target) {
    var  result;
    var  targetType = checkType(target);
    if(targetType === 'Object') {
        result = {}
    }else if (targetType === 'Array') {
        result = []
    }else {
        return target
    }
    for( var i in target ) {
        var value = target[i]
        if(checkType(value) === 'Object' || checkType(value) === 'Array') {
            result[i] = clone(value)//递归
        }else {
            result[i] = value
        }
    }
    return result;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!