我正在用ES6中的Jest为React组件编写一些测试。在一个测试中,我需要克隆一个导入的json并对克隆的对象进行变异,但是当我对克隆的对象进行变异时,原始对象也会发生变异!
import obj from './object.json'; // obj = { name: 'someName' }
describe('Testing a component', () => {
it('Some testing', () => {
const obj2 = Object.assign({}, obj); //Clone the object
obj2.name = 'otherName'; // Muatate the object
console.log(obj); // { name: 'otherName' }
});
})
为什么会发生这种情况?为什么当我对克隆对象进行变异时,原来导入的对象也会发生变异?
发布于 2017-07-12 03:26:38
Object.assign
仅执行浅层克隆。这意味着内部对象仍然指向原始对象。
要进行深度克隆,您可以使用Lodash或immutability-helper。
发布于 2017-07-12 03:39:25
您可以使用此函数复制对象属性:
const copyObj = (obj) => Object.keys(obj).map(k => [k, obj[k]]).reduce((m, [k, v]) => {m[k] = v; return m}, {})
https://stackoverflow.com/questions/45042924
复制相似问题