我把我的问题变成单行标题有点困难,所以这是交易。我在一个对象上有两个函数。这些是:
returnPlayers: function() {
return this.players;
},
和
returnPlayerNames: function() {
for (var i = 0; i < this.players.length; i++) {
return this.players[i].name;
}
}
第一个的输出是:
[ 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 } ]
我们可以清楚地看到,数组中有两个对象。第二个的输出(应该只返回名称)只是第一个对象的名称:Foo
我做错了什么?输出来自console.log()
ofc。
答案 0 :(得分:2)
当您return
时,该功能结束。 for循环的其余部分不会运行。这就是你要做的事情。
returnPlayerNames: function() {
var output = [];
for (var i = 0; i < this.players.length; i++) {
output.push(this.players[i].name);
}
return output;
}
这将创建一个新数组,并为其添加每个播放器的名称。有一天,每当ES7开始运行时,我们都可以在一行中完成这项工作,就像在Python中一样。
return [player.name for player in players]
未来会非常酷。但在那之前,我说的第一件事就是这样做。
答案 1 :(得分:0)
使用数组映射方法
returnPlayerNames: function() {
return this.players.map(function(player) { return player.name })
}