2017-01-22 36 views
0
var actual = { first: 1, second : 2 } 
var copy = actual; 

delete copy.first; 

當我控制檯日誌的複製,它沒有在它的第一屬性,但是當我控制檯日誌的實際,即使是對象可是沒有第一個屬性。刪除對象上的屬性以正確的方式

有人能解釋一下這裏發生了什麼嗎?以及如何避免這種情況?

預計:

actual: { first: 1, second : 2 } 
Copy: { second: 2 } 

P.S:我知道,我可以直接複製對象而不復制指定第二個屬性,這只是一個例子。我正在處理非常大的對象。所以我必須複製並刪除屬性而不影響實際的對象。

謝謝

+1

'copy === actual',它不是副本,它擁有對同一個確切對象的引用。您可能想使用Object.assign' – elclanrs

回答

1

您可以使用JSON.stringify()JSON.parse(),或者通過@elclanrs的建議,Object.assign()

var actual = { first: 1, second : 2 } 
var copy = JSON.parse(JSON.stringify(actual)); 
delete copy.first; 

var actual = { first: 1, second : 2 } 
var copy = Object.assign({}, actual); 
delete copy.first; 
+0

請參閱[在JavaScript中深度克隆對象的最有效方法是什麼?](http://stackoverflow.com/q/122102/) – guest271314

+0

guest271314我做了,謝謝 – endtoend6

1

你沒有做對象的副本,但只是複製了參考。 如果要複製對象,請考慮使用ES6 Object.assignlink)或lodash的assignlink)。

Object.assign將對象作爲參數。將對象的所有屬性複製到參數列表中的第一個對象,並返回對第一個對象的引用。

var actual = { first: 1, second : 2 }; 
var copy = Object.assign({}, actual); 

delete copy.first;