2013-05-07 77 views
0

我有關於將對象放在數組上的問題。我這樣做是爲了記錄活動的歷史記錄,所以我把每個對象都放在一個數組中,並把它放在裏面。但是當我按下它時,先前的對象數據將更新爲當前。我不知道問題在哪裏?我真的需要幫助。謝謝。在陣列上添加對象更新以前的對象

我試圖通過這個克隆對象:

function deepCopy(obj) { 
if (Object.prototype.toString.call(obj) === '[object Array]') { 
     var out = [], i = 0, len = obj.length; 
     for (; i < len; i++) { 
      out[i] = arguments.callee(obj[i]); 
     } 
     return out; 
    } 
    if (typeof obj === 'object') { 
     var out = {}, i; 
     for (i in obj) { 
      out[i] = arguments.callee(obj[i]); 
     } 
     return out; 
    } 
    return obj; 
} 

,但仍然在這裏沒有運氣。 :(

+7

代碼缺失 – 2013-05-07 10:25:13

+1

請顯示您的代碼。 – 2013-05-07 10:25:47

回答

2

的問題是最有可能的,你是一遍又一遍推動同一個對象實例:。

var obj = {}; 
var arr = []; 
for (var i = 0; i < 10; i++) { 
    obj.index = i; 
    arr.push(obj); 
} 

結果是十所引用同一個對象的數組

你有每次創建一個新對象實例實施例:

var arr = []; 
for (var i = 0; i < 10; i++) { 
    var obj = {}; 
    obj.index = i; 
    arr.push(obj); 
} 

結果是具有10個引用十個單獨對象的數組

+0

tnx快速回復@guffa。我想你已經指出了這個問題。但是可以複製當前對象並將其設置爲新對象嗎? – rjx44 2013-05-07 10:42:58

+0

@ rjx44:你可以通過創建一個新的空對象來實現,並複製原始對象的所有屬性。通常,創建原始對象的另一個實例會更容易。 – Guffa 2013-05-07 10:48:45

+0

我粘貼了用於複製的代碼,但仍會更改以前的數據。 – rjx44 2013-05-07 10:57:54