Javascript 当通过循环访问数组中对象的属性时,仅获取第一个元素

Javascript 当通过循环访问数组中对象的属性时,仅获取第一个元素,javascript,arrays,loops,socket.io,Javascript,Arrays,Loops,Socket.io,对我来说,把我的问题放在一行标题上有点难,所以就这么定了。我对一个对象有两个函数。这些是: returnPlayers: function() { return this.players; }, 及 returnPlayerNames:function(){ for(var i=0;i

对我来说,把我的问题放在一行标题上有点难,所以就这么定了。我对一个对象有两个函数。这些是:

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

returnPlayerNames:function(){
for(var i=0;i
第一个的输出是:

[Player]{
插座:
插座{
nsp:[对象],
服务器:[对象],
适配器:[对象],
id:'cyrh8lgdrtmawuzaad',
客户端:[对象],
conn:[对象],
房间:[对象],
确认:{},
是的,
错:,
握手:[对象],
_事件:[对象],
_eventsCount:3},
名称:“Foo”,
分数:0},
玩家{
插座:
插座{
nsp:[对象],
服务器:[对象],
适配器:[对象],
id:'NCCYJPFFKD1JASDXAAC',
客户端:[对象],
conn:[对象],
房间:[对象],
确认:{},
是的,
错:,
握手:[对象],
_事件:[对象],
_eventsCount:3},
名称:'酒吧',
分数:0}]

我们可以清楚地看到,数组中有两个对象。第二个对象的输出(应该只返回名称)只是第一个对象的名称,但是:
Foo


我做错了什么?输出来自ofc的
console.log()
。for循环的其余部分将不会运行。这是你必须做的

returnPlayerNames: function() {
    var output = [];
    for (var i = 0; i < this.players.length; i++) {
        output.push(this.players[i].name);
    }
    return output;
}
未来会很酷。但在那之前,我说的第一件事必须做

使用数组映射方法

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

return
导致函数结束,即使for循环尚未完成。将所有名称放入一个数组,并在for循环后返回该数组。
returnPlayerNames: function() {
  return this.players.map(function(player) { return player.name })
}