2017-08-12 24 views
0

我不明白爲什麼我推動對象時,數組中的所有值都改變了嗎? 請參閱Chrome控制檯下面:JavaScript「推」 - 基本

kakebo ={ 
     title: "", 
     date: "", 
     status : "", 
     solde: 0, 
     entry_up: [ 
     { name: "", amount:0}, 
     ], 
     entry_down: [ 
     { name: "", amount:0}, 
     ] 
    }; 

日誌:{標題: 「」,日期: 「」 狀態: 「」,solde:0,entry_up:陣列(1),...}

kakebos = []; 

日誌:[]

kakebo.title = "test1" 

日誌: 「測試1」

kakebos.push(kakebo); 

kakebos 

日誌:[{…}]0: {title: "test1", date: "", status: "", solde: 0, entry_up: Array(1), …}

kakebo.title = "test2" 

日誌: 「TEST2」

kakebos.push(kakebo); 

日誌: kakebos (2)[{...},{...}] 線1:0:{標題:「 test2「,date:」「,status:」「,solde:0,entry_up:Array(1),...} line 2:1:{title:」test2「,date:」「,status:」「,solde :0,entry_up:Array(1),...}

+2

請通過在突出它正確地格式化代碼編輯器並點擊ctrl + k。此外,你可能想詳細說明你在問什麼。 – Carcigenicate

+1

您將'kabebo'推向數組兩次,*對象的引用* - **它們指向相同的對象**。兩個元素都會看到修改對象,因爲它們是相同的參考並指向同一個對象。 – Li357

回答

0

您不是推兩個不同的對象,而是實際只有一個,並改變它的標題。

var el = {prop:1}, arr = []; 

arr.push(el);//el is added to the array 

el.prop = 2;//el is changed 

arr.push(el);//el is added a second time 

您可以將之前通過複製對象解決這個問題:

arr.push(Object.assign({},el)); 

,或者你只是設置了多個對象:

var el = {prop:1}, arr = []; 

arr.push(el);//el is added to the array 

var el2 = {prop:2}; 

arr.push(el2);