通过循环访问数组中 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 })
}