2017-07-22 2 views
2

J'ai besoin de pousser l'objet vers le tableau en Javascript, mais à chaque fois que j'appuie sur écraser le même objet que j'ai déjà ajouté. Par exemple:Pousser l'objet en Javascript

//This is object list 
var NewIssue = {}; 
//This is array 
var newIssueList = []; 

function myFunction() { 
    for (var i = 0; i < 3; i++) { 
     NewIssue.Id = i; 
     NewIssue.Number = 233 + i; 
     NewIssue.Name = "Test" + i.toString(); 

     newIssueList.push(NewIssue); 
    } 
} 

À la fin je vais avoir newIssueList avec 3 mêmes objets. Pourquoi cela écrase le premier et comment résoudre ce problème?

+1

Ajouter 'NewIssue = {};' en haut de la boucle. – Pointy

Répondre

3

Vous devez déplacer l'objet à l'intérieur de la boucle.

var newIssueList = []; 
 

 
function myFunction() { 
 
    for (var i = 0; i < 3; i++) { 
 
     var NewIssue = {}; 
 
     NewIssue.Id = i; 
 
     NewIssue.Number = 233 + i; 
 
     NewIssue.Name = "Test" + i.toString(); 
 

 
     newIssueList.push(NewIssue); 
 
    } 
 
} 
 

 
myFunction(); 
 

 
console.log(newIssueList);

Et alors vous pouvez étendre l'objet littéral un mais pour le rendre beaucoup plus lisible:

for (var i = 0; i < 3; i++) { 
     var NewIssue = { 
      Id:i, 
      Number:233+i, 
      Name:"Test"+i 
     }; 

     newIssueList.push(NewIssue); 
    } 
1

Vous pouvez également éviter d'utiliser un var superflu en créant une ligne objet:

newIssueList.push({ 
    Id: i, 
    Number: 233 + i, 
    Name: "Test" + i.toString() 
}); 
2

Il y a seulement un objet, et chaque fois que vous le poussez dans le tableau, vous poussez une référence à l'objet existant. Lorsque vous modifiez l'objet, chaque élément du tableau le reflète, car ils pointent tous vers le même objet.

Vous devez créer un nouvel objet à chaque itération.

//This is array 
 
var newIssueList = []; 
 

 
function myFunction() { 
 
    for (var i = 0; i < 3; i++) { 
 
    newIssueList.push({ 
 
     id: i, 
 
     number: 233 + i, 
 
     name: "Test" + i.toString() 
 
    }); 
 
    } 
 
} 
 

 
myFunction(); 
 

 
console.log(newIssueList);