2017-10-01 5 views
2

Je crée deux objets, struct_one et le struct_two auxiliaire pour les données primaires. Après avoir ajouté des données à l'aide de .push. Toutes les données du tableau struct_one, ont une dernière les données.Pourquoi mon objet ne sauvegarde que les dernières données

var struct_one = { comments:[{comment:String}] }; 
 
var struct_two = {comment:String}; 
 

 
function taskElementWork() { 
 

 
    this. createBlockSaveNew = function() { 
 
    struct_two.comment = 1 + "RED"; 
 
    struct_one.comments.push(struct_two); 
 
    console.log(struct_one.comments[1].comment); // = 1RED 
 
    struct_two.comment = 2 + "RED"; 
 
    struct_one.comments.push(struct_two); 
 
    console.log(struct_one.comments[2].comment); // = 2RED 
 
    struct_two.comment = 3 + "RED"; 
 
    struct_one.comments.push(struct_two); 
 
    console.log(struct_one.comments[3].comment); // = 3RED 
 

 
    console.log(struct_one.comments[1].comment); // = 3RED -> Why! 
 
    } 
 
} 
 

 
test = new taskElementWork(); 
 
test.createBlockSaveNew();

+0

Pouvez-vous trier votre indentation. – dwjohnston

+0

Pourrait-il s'agir d'un problème d'index? Peut-être commencer par struct_one.comments [0] .comment, puis aller à 1, puis 2 –

+0

Aussi 'this' dans' this.createBlockSaveNew' ne fait probablement pas ce que vous pensez qu'il fait. – Andy

Répondre

3

Vous utilisez la même référence d'objet à pousser.

Vous pouvez prendre un nouvel objet avant d'attribuer des valeurs et en poussant, comme

function taskElementWork() { 
    var struct_two = { comment: '' }; 
    struct_two.comment = 1 + "RED"; 
    struct_one.comments.push(struct_two); 
    console.log(struct_one.comments[1].comment); // = 1RED 

    struct_two = { comment: '' }; 
    struct_two.comment = 2 + "RED"; 
    struct_one.comments.push(struct_two); 
    console.log(struct_one.comments[2].comment); // = 2RED 

    var struct_two = { comment: '' }; 
    struct_two.comment = 3 + "RED"; 
    struct_one.comments.push(struct_two); 
    console.log(struct_one.comments[3].comment); // = 3RED 
} 

Une façon slighy mieux est d'utiliser une fonction pour la construction de la structure et de prendre un paramètre pour le commentaire:

function taskElementWork() { 
    function buildStructure(comment) { 
     return { comment: comment }; 
    } 

    struct_one.comments.push(buildStructure(1 + "RED")); 
    console.log(struct_one.comments[1].comment); // = 1RED 

    struct_one.comments.push(buildStructure(2 + "RED")); 
    console.log(struct_one.comments[2].comment); // = 2RED 

    struct_one.comments.push(buildStructure(2 + "RED")); 
    console.log(struct_one.comments[3].comment); // = 3RED 
} 
+0

Merci. Je suis compris. – Tflag