通过循环访问数组中 object 的属性时,仅获取第一个元素
When accessing properties of an object in an array through a loop, only getting the first element
将我的问题放入one-liner标题中对我来说有点困难,所以这就是交易。我在 object 上有两个函数。它们是:
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 } ]
我们可以清楚的看到,数组中有两个object。第二个的输出(应该只有 return 个名字)只是第一个 object 的名字但是:Foo
我做错了什么?输出来自 console.log()
ofc.
当你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]
未来会很美好。但在那之前,我说的第一件事必须要做。
使用数组映射方法
returnPlayerNames: function() {
return this.players.map(function(player) { return player.name })
}
将我的问题放入one-liner标题中对我来说有点困难,所以这就是交易。我在 object 上有两个函数。它们是:
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 } ]
我们可以清楚的看到,数组中有两个object。第二个的输出(应该只有 return 个名字)只是第一个 object 的名字但是:Foo
我做错了什么?输出来自 console.log()
ofc.
当你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]
未来会很美好。但在那之前,我说的第一件事必须要做。
使用数组映射方法
returnPlayerNames: function() {
return this.players.map(function(player) { return player.name })
}