如何在discord.js中正确访问[[Entries]]属性
discord.js 访问[[Entries]]属性正确实现方式
message.guild.members.cache 返回的是discord.js自定义的Collection类型,本质是JavaScript Map的扩展类,Map的内部[[Entries]]属性不支持通过数组下标[0]直接访问,这是之前写法返回undefined的核心原因。
下面分常用场景给出对应实现:
- 场景1:获取全量键值对数组
调用entries()方法转普通数组即可通过下标访问:// 得到[[key1, value1], [key2, value2], ...]格式的全量条目数组 const allEntries = Array.from(message.guild.members.cache.entries()); // 按下标取对应条目 const firstEntry = allEntries[0]; const firstEntryKey = firstEntry[0]; // 对应服务器成员ID const firstEntryValue = firstEntry[1]; // 对应GuildMember实例对象 - 场景2:直接获取指定位置条目
无需转全量数组,可直接使用Collection内置的便捷方法:// 取第一个成员对象 const firstMember = message.guild.members.cache.first(); // 取第一个条目的键 const firstMemberId = message.guild.members.cache.firstKey(); // 取第N个条目,例:取第3个成员对象,下标从0开始 const thirdMember = message.guild.members.cache.at(2); - 场景3:遍历所有条目
直接使用Map/Collection自带的遍历方法即可:// forEach遍历 message.guild.members.cache.forEach((member, memberId) => { console.log(memberId, member.user.tag); }); // for...of遍历 for (const [memberId, member] of message.guild.members.cache) { console.log(memberId, member.user.tag); }
内容的提问来源于stack exchange,提问作者Zarcross
相关产品推荐
相关产品推荐

