Discord JS:从集合中提取数据

Discord JS: Extracting data from a collection

我有一个命令,我想将语音通道中用户的 id 写入数组。到目前为止,我设法用 joinedTimestamp 等编写了整个用户集合。现在我想从集合中提取用户的 id

我的命令是这样的:

client.on('messageCreate', (message) => {
    let waitingroom = message.guild.channels.cache.get("952324088762867722")
    let player = [];
    let isadmin = message.member.roles.cache.has(adminRole);

    if (message.content.toLowerCase() === prefix + 'startgame' && isadmin) {
        player.push(waitingroom.members);
        console.log(player);
    }    
});

这就是当 waitingroom 中有 2 个用户时我从数组中得到的:

[
  Collection(2) [Map] {
    '392776445375545355' => GuildMember {
      guild: [Guild],
      joinedTimestamp: 1646940658665,
      premiumSinceTimestamp: null,
      nickname: null,
      pending: false,
      communicationDisabledUntilTimestamp: null,
      _roles: [Array],
      user: [User],
      avatar: null
    },
    '849388169614196737' => GuildMember {
      guild: [Guild],
      joinedTimestamp: 1647168003344,
      premiumSinceTimestamp: null,
      nickname: 'Test-Account [Nils]',
      pending: false,
      communicationDisabledUntilTimestamp: null,
      _roles: [],
      user: [User],
      avatar: null
    }
  }
]

但我只想要集合中的用户 ids。感谢您的帮助。

Better solution, see accepted answer.

首先你需要用一个空数组创建一个变量。
然后您可以使用 .map function of the member Collection 将用户 ID 推送到数组。

let arr = [];
<Channel>.members.map(user => {
    arr.push(user.id);
});

接受的答案有点冗长。 Collection#map() return 是一个数组并接受一个回调函数,所以你所要做的就是遍历成员和 return 他们的 ids:

let waitingRoom = message.guild.channels.cache.get('952324088762867722')
let memberIDs = waitingRoom.members.map(member => member.id)

现在,memberIDs 是 snowflakes/IDs 个成员的数组。无需创建新数组或使用 push 方法。实际上,您永远不应该真正将 mappush 或其他改变数组的方法一起使用。