2017-08-12 14 views
0

オブジェクトをプッシュすると、すべての値が配列で変わる理由を理解できませんか?JavaScript "push" - 基本

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" 

ログ: "TEST1"

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:{タイトル: " 行2:1:{title: "test2"、日付: ""、ステータス: ""、ソルード:0、entry_up:Array(1)、...}

+2

でそれを強調することにより、適切にあなたのコードをフォーマットしてください。 ctrl + kをクリックします。また、あなたが求めていることを詳しく説明したいかもしれません。 – Carcigenicate

+1

'kabebo'を配列に2回プッシュしています。*オブジェクトの参照* - **は同じオブジェクトを指しています**。オブジェクトを変更することは、同じ参照であり、同じオブジェクトを指しているので、両方の要素から順に見えます。 – Li357

答えて

0

あなたは2つの異なるオブジェクトを押すわけではありませんが、ちょうど1つで、そのタイトルを変更します。

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

か、単に複数のオブジェクトを設定します:

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 

あなたは追加する前にオブジェクトをコピーすることのいずれかによって、この問題を解決することができます

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

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

var el2 = {prop:2}; 

arr.push(el2); 
関連する問題