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

时间:2015-10-10 15:50:29

标签: javascript arrays loops socket.io

我把我的问题变成单行标题有点困难,所以这是交易。我在一个对象上有两个函数。这些是:

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。

2 个答案:

答案 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 })
}