我试图克隆和对象,然后对原始对象进行更改并做一些测试包装测试失败恢复克隆回来。在JavaScript中克隆一个对象的解耦版本
目前我已经试过_.clone
(下划线),angular.extend
,angular.merge
,angular.copy
,Object.create
,Object.assign
,JSON.parse(JSON.stringify(o))
,但不知何故,我在原来的对象改变被反射回克隆。
我试图克隆和对象,然后对原始对象进行更改并做一些测试包装测试失败恢复克隆回来。在JavaScript中克隆一个对象的解耦版本
目前我已经试过_.clone
(下划线),angular.extend
,angular.merge
,angular.copy
,Object.create
,Object.assign
,JSON.parse(JSON.stringify(o))
,但不知何故,我在原来的对象改变被反射回克隆。
您可以使用Object.assign
在vanilla JavaScript中浅拷贝对象。
// Shallow copy an object in vanilla JS
let oldObj = {
name: 'Joe',
favColor: 'Green',
}
// Shallow copy oldObj to the newObj using assign
var newObj = Object.assign({}, oldObj);
// Changes made to the new object are not reflected in the new object
newObj.favFood = 'pizza';
console.log(oldObj.favFood); // undefined
要执行 “深拷贝”,你可以使用JSON.parse(JSON.stringify(a))
。
let oldObj = {
name: 'Joe',
favColor: 'Green',
favPizza: {
cheese: true,
pepperoni: false,
},
};
// Deep copy an object using JSON.parse(JSON.stringify(a))
let newObj = JSON.parse(JSON.stringify(oldObj));
// Changes made to the new object are not reflected in the new object
newObj.favPizza.sausage = true;
console.log(oldObj.favPizza.sausage); //undefined
参考:
我做过{originalPizza:Object.assign({},pizza)},但是当我对披萨配料进行更改时,它变成了原来的比萨。 – Ash
@ArashKiani - 我添加了一个执行“浅拷贝”和“深拷贝”。我希望它有帮助! –
也许你需要[深克隆(http://stackoverflow.com/questions/4459928/how-对深克隆中的JavaScript)? – Paulpro
'_.clone'是对象的浅表副本,但您需要深度复制。改为使用'_.cloneDeep'。 –
不幸的是,我们不使用lodash,我试图使用等效角度,但所有这些都反映了变化 – Ash