当我们需要深深克隆一个对象时,我们应该怎么做

时间:2017-07-25 08:39:38

标签: javascript json functional-programming ecmascript-6 redux

根据另一个问题的说法:

  

传播运算符类似于Object.assign,并没有深度克隆   宾语。 JSON的工作原因是因为你创建了一个   然而,整个新对象将通过严格的相等检查   所有组件都会不必要地更新,因为没有任何东西会通过   现在进行严格的平等检查。

     

Object.assign({},... prevState,... newState)将创建一个新的   顶级对象,但不会为任何对象创建新对象   嵌套在prevState或newState中。但是,你必须小心   更新嵌套对象,以避免不必要的重新渲染。这可以得到   对于深层嵌套的对象和数组来说很棘手。

我的问题是......当我们需要返回具有属性包含数组的对象的新版本时,我们必须做什么?例如:

const foo = {
  myArray: [1, 2, 3],
  name: 'Hello world'
};

const clonedObj = { ...foo }

这将创建一个新对象,其中包含名称及其内容的副本,myArray键的副本,但不包含[1,2,3]的副本。

JSON.parse + JSON.stringify可以做到这一点,但看起来并不干净。

我有什么选择?

谢谢

1 个答案:

答案 0 :(得分:-2)

const clonedObj = Object.assign({}, foo);

Object.assign