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

按排名分组用户数组:实现按rankId遍历同排名用户及所有排名

按rank字段分组用户数组的解决方案

嘿,这事儿我之前也碰到过,用JavaScript的reduce方法就能轻松搞定,完全匹配你想要的结构和后续遍历需求!

先看你的原数组:

var array = [ 
  { user: '1xJs8A', rank: 1 }, 
  { user: '1xJs8B', rank: 1 }, 
  { user: '1xJs8C', rank: 2 }, 
];

核心实现代码

用Array.prototype.reduce()来分组是最简洁的方式:

const groupedByRank = array.reduce((acc, currentUser) => {
  const rank = currentUser.rank;
  // 如果当前rank还没在累加器里,先初始化一个空数组
  if (!acc[rank]) {
    acc[rank] = [];
  }
  // 把当前用户加入对应rank的数组
  acc[rank].push(currentUser);
  return acc;
}, {}); // 初始值设为空对象

处理后的结构

运行完上面的代码,groupedByRank的结构完全符合你的预期:

{
  1: [ { user: '1xJs8A', rank: 1 }, { user: '1xJs8B', rank: 1 } ],
  2: [ { user: '1xJs8C', rank: 2 } ]
}

怎么用这个结果

  • 遍历同一排名下的所有用户:比如要遍历rank为1的用户,直接这样写就行:
    groupedByRank[1].forEach(user => {
      console.log(`用户ID:${user.user},排名:${user.rank}`);
    });
    
  • 遍历所有排名:如果要逐个处理每个排名下的用户组,可以用Object.keys或者Object.values:
    // 遍历所有rankId,同时拿到对应的用户数组
    Object.keys(groupedByRank).forEach(rankId => {
      console.log(`处理排名${rankId}的用户:`);
      groupedByRank[rankId].forEach(user => console.log(user));
    });
    
    // 或者直接遍历每个排名的用户数组
    Object.values(groupedByRank).forEach(userArray => {
      userArray.forEach(user => console.log(user));
    });
    

如果你确实需要数组形式(而不是对象),也可以把结果转成数组结构:

const groupedArray = Object.entries(groupedByRank).map(([rankId, users]) => ({
  rankId: Number(rankId), // 把字符串转成数字类型
  users: users
}));

不过看你的需求,直接用对象结构更方便按rankId快速访问,完全满足array[rankId].forEach()的用法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:12:46