Discord.js使用for...in遍历JSON仅得guildID 如何正确读取userID
问题根源
你的JSON数据顶层结构以GuildID作为键,对应的值才是当前公会下的用户数据集,你直接用for...in遍历顶层的money对象,拿到的自然只有GuildID,而非你需要的UserID。
修正代码
// 先提取当前公会的用户数据集,避免重复取值 const currentGuildUserMap = money[message.guild.id] // 前置校验,避免当前公会无数据时报错 if (!currentGuildUserMap) return for (let userID in currentGuildUserMap) { res.push({ "guildid": message.guild.id, "id": userID, "money": currentGuildUserMap[userID].money }) } // 排序逻辑放到循环外执行,避免循环n次就执行n次排序造成性能浪费 // 直接取对象的money属性排序,比通过Object.values取索引更稳定清晰 res.sort((a, b) => b.money - a.money)
注意事项
- 你给出的JSON示例里GuildID、UserID后面带的
<======GuildID/<======userID属于标注内容,实际存储数据时不要保留这些后缀,否则你遍历拿到的userID会携带多余字符,无法和Discord接口返回的真实用户ID匹配 - 如果需要遍历所有公会的所有用户,可以先遍历顶层
money对象拿到所有GuildID,再嵌套遍历每个GuildID对应的用户数据集即可
内容的提问来源于stack exchange,提问作者Kejlo
相关产品推荐
相关产品推荐

