2012-05-03 29 views
2

這是我試圖做的過於簡單的版本。jquery深更換

var usersChoice; 
var object1 = {name: 'fu', id:'123', infoArray: [1,2,3,4,5]}; 
var object2 = {name: 'bar', id:'456', infoArray: [9,8]}; 

jQuery.extend(true, usersChoice, object1); 

然後,如果我想改變我的想法

jQuery.extend(true, usersChoice, object2); 

結果:

usersChoice = {name: 'bar', id:'456', infoArray: [9,8,***3,4,5***]}; 

我要的是與新來完全取代舊的對象。哪怕只是一個深深的擦除功能,我可以打電話之前延長像...

userChoice.nukeItFromOrbit(); 

對於我試圖記錄只是userChoice =新的對象或不是抄襲只是指向原來的對象。這兩種解決方案都有一個令人討厭的趨勢,即沿線的某一點超出範圍。 (其中一些物體被傳遞爲'this',我懷疑是罪魁禍首)

那麼如何在不重新發明深度複製輪的情況下做到這一點?我一直在尋找,所有我發現的是重新發明輪子或被告知他們是沒有理由的,我將永遠不得不做我正在做的事情。 =/

+0

所以,你希望它合併寄託都只是陣列?或者如果object2缺少名稱,最終結果是否缺少名稱? (另外,給我一個用例,因爲我在這個陣營裏從來不需要這樣做) –

+0

問題不清楚,你想要deepExtend還是你不想深度擴展? – Abid

+0

@Abid我想深刻的更換,舊的對象被所有的數據和新的投入nuked。 –

回答

1

嗯,我希望我沒有失去了一些東西(如果有的話給我留下了評論請),但爲什麼不只是延長一個空對象

usersChoice = jQuery.extend(true, {}, object2); 
+0

我真的不知道你的解決方案爲什麼不起作用。 'usersChoice = jQuery.extend(true,{},object2);' 在它的子功能範圍內工作,但該更改不影響userChoice外部 'jQuery.extend(true,usersChoice,object2);' 確實會影響它的範圍,但有我提到的限制。 –

+0

那麼,這需要一些示例代碼與我猜測的用法(用來測試答案)。 – Meligy