discord.js遍历roles集合为何需用role[1]取值?Node语法问题求解
问题原因解释
你用到的discord.js库中,guild.roles.fetch()返回的结果是Collection类型,这是discord.js封装的、继承自JS原生Map的键值对集合结构。
- 当你使用
for...of直接遍历Map/Collection实例时,每次迭代返回的都是长度为2的数组:- 数组第0位
role[0]是集合的键,对应当前项的角色ID - 数组第1位
role[1]是集合的值,对应包含id、name等完整属性的角色对象
所以你需要通过role[1]才能拿到可正常调用属性的角色实例。
- 数组第0位
更简洁的优化写法
你可以在遍历时直接解构数组,避免每次写下标调用:
const guild = client.guilds.cache.get('827888294100074516'); await guild.roles.fetch().then(roles => { // 直接解构出键(角色ID)和值(角色对象) for(const [roleId, role] of roles) { console.log(role.id + ' ' + role.name); } });
内容的提问来源于stack exchange,提问作者Mark Andrew
相关产品推荐
相关产品推荐

