2017-07-25 46 views
-1

有什么赛义德另一个问题据:我们应该做的,当我们需要克隆的对象深深

蔓延运营商就像是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做的伎俩,但看起来不像一个干净的方式。

我还有什么替代方案?

谢谢

+0

https://stackoverflow.com/questions/4459928/how-to-deep-clone-in-javascript 希望这有助于。 –

回答

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

Object.assign

+2

考虑在回答前仔细阅读问题。它不仅清楚地讨论了对“深层”拷贝的需求,还专门将“Object.assign”称为不适用于深拷贝(它不会)。 –

相关问题