2017-07-25 38 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」稱爲不適用於深拷貝(它不會)。 –