You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历Discord用户ID键的JSON并按指定字段排序,保留关联数据

解决方案:排序用户统计数据并置顶指定用户

嘿,我帮你整理了一套完美的实现方案,完全贴合你的需求——不管是按字段排序、保留关联数据,还是把指定用户放在最顶部,都能轻松搞定!

步骤1:把键值对对象转成可排序的数组

因为你的JSON是以用户ID为键的对象,而对象本身没法直接排序,所以第一步我们要把它转换成[用户ID, 用户数据]格式的数组,用Object.entries()就能快速实现:

// 假设你的用户统计数据存在这个变量里
const userStats = { 
  "350707981178109964":{"wins":1,"losses":0,"rank":4,"username":"TheeSniper95"}, 
  "426459326031593482":{"wins":0,"losses":0,"rank":1,"username":"Ding Dang Test"}, 
  "267752826623492102":{"wins":0,"losses":0,"rank":1,"username":"MrDooba"} 
};

// 转换为可排序的数组,每个元素是 [userId, userData]
let sortedUsers = Object.entries(userStats);

步骤2:按指定字段排序

接下来就可以根据你需要的字段自定义排序逻辑了,比如按rank升序(rank越小越靠前),如果rank相同就按wins降序(赢的多的在前):

// 排序逻辑:先按rank从小到大,rank相同则按wins从大到小
sortedUsers.sort((a, b) => {
  // a[1] 和 b[1] 对应每个用户的wins、losses等关联数据
  if (a[1].rank !== b[1].rank) {
    return a[1].rank - b[1].rank; // 升序:rank数值小的排前面
  } else {
    return b[1].wins - a[1].wins; // 降序:wins数值大的排前面
  }
});

如果你只想单纯按wins从高到低排序,直接简化成:

sortedUsers.sort((a, b) => b[1].wins - a[1].wins);

步骤3:把指定用户置顶

最后一步,把你需要置顶的用户(比如当前消息的作者message.author.id,或者任意指定的用户ID)移到数组最顶部:

// 替换成你要置顶的用户ID,这里用discord.js的消息作者ID举例
const targetUserId = message.author.id;

// 找到目标用户在数组中的位置
const targetIndex = sortedUsers.findIndex(([userId]) => userId === targetUserId);

// 如果找到该用户,就把它从原位置移除并插入到数组开头
if (targetIndex !== -1) {
  const targetUserEntry = sortedUsers.splice(targetIndex, 1)[0];
  sortedUsers.unshift(targetUserEntry);
}

可选:生成并发送可视化排行榜

排序完成后,你可以把数组转换成易读的文本,比如在Discord频道里发送格式化的排行榜:

// 生成排行榜内容
const leaderboardText = sortedUsers.map(([userId, data], index) => {
  return `${index + 1}. ${data.username} | Rank: ${data.rank} | Wins: ${data.wins} | Losses: ${data.losses}`;
}).join('\n');

// 发送到当前频道
message.channel.send(`📊 **用户排行榜**\n${leaderboardText}`);

这样处理后,你就能得到一个既按指定字段排序、又置顶了目标用户的结果,而且所有关联的用户数据(username、wins等)都完整保留啦!

内容的提问来源于stack exchange,提问作者Snips YT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:00:32