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;
}
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;
}
来源:oschina
链接:https://my.oschina.net/u/4161514/blog/4257030