2017-10-19 24 views
1

如何使用新的擴展運算符克隆一個具有數組的對象?使用擴散運算符的數組克隆對象

實施例對象:

vehicles: { 
    cars: [1, 2], 
    boats: [3, 4] 
} 

我想與在它的陣列中的新對象。在那個新的對象中,我希望能夠改變或添加到一個沒有參考和影響車輛對象的陣列。

+0

你可以指定你的新對象的內容? – void

+0

傳播操作符使淺拷貝,所以任何深層對象仍然不幸被引用。 –

回答

3

Object.assign和spread運算符創建淺層克隆,只有它們被引用的深度只有一層。我發現的最好的方法(感謝MDN)是使用JSON函數來創建一個真正的克隆。

let vehicles = { 
 
    cars: [1, 2], 
 
    boats: [3, 4], 
 
}; 
 

 
let test = JSON.parse(JSON.stringify(vehicles)); 
 

 
console.log(vehicles, test); 
 

 
test.cars[0] = 5; 
 
vehicles.cars[0] = 7; 
 

 
console.log(vehicles, test);

+0

偉大的解決方案! – Euroclydon37

+0

如果你有大對象會怎麼樣?它會在這種情況下處理嗎? – Sumit

+0

我不明白爲什麼不,爲什麼不,如果你有一個大的單一級別的對象,我會建議使用Object.assign,(個人觀點)我認爲使用內置的語言功能更好的時候,他們會做這項工作。對於大型多級對象,此方法將正常工作。 –