2015-10-10 1 views
0

Il m'est un peu difficile de mettre mon problème dans un titre de doublure, alors voici l'affaire. J'ai deux fonctions sur un objet. Ce sont:Lors de l'accès aux propriétés d'un objet dans un tableau à travers une boucle, obtenir seulement le premier élément

returnPlayers: function() { 
    return this.players; 
}, 

et

returnPlayerNames: function() { 
    for (var i = 0; i < this.players.length; i++) { 
     return this.players[i].name; 
    } 
} 

La sortie du premier est:

[ Player { socket: Socket { nsp: [Object], server: [Object], adapter: [Object], id: 'CyrH8LGDRtmaWWUzAAAD', client: [Object], conn: [Object], rooms: [Object], acks: {}, connected: true, disconnected: false, handshake: [Object], _events: [Object], _eventsCount: 3 }, name: 'Foo', score: 0 }, Player { socket: Socket { nsp: [Object], server: [Object], adapter: [Object], id: 'nCCYjPFfkd1JaSDXAAAC', client: [Object], conn: [Object], rooms: [Object], acks: {}, connected: true, disconnected: false, handshake: [Object], _events: [Object], _eventsCount: 3 }, name: 'Bar', score: 0 } ]

On peut voir clairement, qu'il ya deux objets dans le tableau. La sortie du second (qui ne devrait renvoyer que des noms) est seulement le nom du premier objet: Foo

Qu'est-ce que je fais mal? La sortie est de console.log() ofc.

+2

'return' provoque une fonction pour terminer même si la boucle n'a pas fini. Mettez tous les noms dans un tableau et renvoyez-le après la boucle for. – SpiderPig

Répondre

2

Lorsque vous return, la fonction se termine. Le reste de la boucle for ne fonctionnera pas. Voici ce que vous devez faire.

returnPlayerNames: function() { 
    var output = []; 
    for (var i = 0; i < this.players.length; i++) { 
     output.push(this.players[i].name); 
    } 
    return output; 
} 

Cela fera un nouveau tableau et ajouter les noms de chaque joueur à lui. Un jour, à chaque fois qu'ES7 sera lancé, nous pourrons le faire en une ligne, comme en Python.

return [player.name for player in players] 

Le futur va être plutôt cool. Mais jusque-là, la première chose que j'ai dite devra faire.

0

utiliser la méthode de la carte Arrays

returnPlayerNames: function() { 
    return this.players.map(function(player) { return player.name }) 
}