2017-07-11 4 views
0

私はES6でJestを使ってReact Componentsのテストを書いています。 1つのテストでは、jsonをインポートしてクローンオブジェクトを変異させるクローンが必要ですが、クローン化されたオブジェクトを変異させると元のオブジェクトも変異します。複製されたオブジェクトを突然変異させ、元のオブジェクトも変異させる[Javascript]

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' } 
    }); 

}) 

これはどうしてですか?なぜ私は複製されたオブジェクトを変異させると、元のインポートされたオブジェクトも変異するのですか?

+0

は深いクローンを実行します。 – frozen

答えて

0

Object.assignはシャロークローンのみです。つまり、内部オブジェクトは元のオブジェクトを引き続き指しています。

深いクローンを作成するには、Lodashまたはimmutability-helperを使用します。

0

あなたはこの機能を備えたオブジェクトのプロパティをコピーすることができます

const copyObj = (obj) => Object.keys(obj).map(k => [k, obj[k]]).reduce((m, [k, v]) => {m[k] = v; return m}, {}) 

jsfiddle example

関連する問題