变异克隆对象,也会改变原始对象[Javascript]

时间:2017-07-11 19:20:41

标签: javascript object testing jest mutation

我正在用ES6中的Jest为React Components写一些测试。在一个测试中,我需要克隆一个json导入并改变克隆对象,但是当我变异克隆的对象时,原始对象也会发生变异!

<table>
  <tr>
    <td></td>
    <td>Text</td>
    <td>Text</td>
  </tr>
  <tr>
    <td rowspan="3">Text</td>
    <td>Text</td>
    <td>Text</td>
  </tr>
  <tr>
    <td>Text</td>
    <td>Text</td>
  </tr>
  <tr>
    <td>Text</td>
    <td>Text</td>
  </tr>
  <tr>
    <td>Text</td>
    <td>Text</td>
    <td>Text</td>
  </tr>
</table>

为什么会这样?为什么当我改变克隆对象时,原始导入的对象也会发生变异?

2 个答案:

答案 0 :(得分:1)

Object.assign只做一个浅层克隆。这意味着内部对象仍然指向原始对象。

要进行深度克隆,您可以使用Lodashimmutability-helper

答案 1 :(得分:0)

您可以使用此功能复制对象属性:

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

jsfiddle example