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

如何对多维用户历史数组实现按ID去重并按分数排序筛选功能

实现方案

核心逻辑

  • 先将嵌套的二维日数据数组扁平化,得到全量历史用户一维数组
  • 遍历全量用户数组,用Map按唯一用户ID做缓存,相同ID对比score字段,始终保留分数最高的用户记录
  • 将缓存中的用户记录转换为数组后,按score字段排序输出

可直接运行的代码示例(JavaScript)

// 你的原始嵌套结构数据
const rawDailyUserData = [
  [{id: 1, name: '张三', score: 82}, {id: 2, name: '李四', score: 91}],
  [{id: 1, name: '张三', score: 95}, {id: 3, name: '王五', score: 87}],
  [{id: 2, name: '李四', score: 89}, {id: 3, name: '王五', score: 90}]
]

// 1. 二维数组扁平化得到全量用户列表
const allHistoryUsers = rawDailyUserData.flat()

// 2. 按ID去重,保留每个用户的最高得分记录
const highestScoreMap = new Map()
allHistoryUsers.forEach(user => {
  const savedUser = highestScoreMap.get(user.id)
  if (!savedUser || savedUser.score < user.score) {
    highestScoreMap.set(user.id, user)
  }
})

// 3. 按score降序排序,得到最终列表
const result = Array.from(highestScoreMap.values()).sort((a, b) => b.score - a.score)

如果需要按分数升序排序,只需将sort回调的返回值改为a.score - b.score即可。

现有功能复用说明

如果你要复用已经实现的两个独立功能,只需调整执行顺序:

  1. 先执行「获取全历史用户最高分数」逻辑,得到每个ID对应的最高score用户列表
  2. 再对该列表执行按score排序逻辑即可
    避免先按ID随机去重再排序,导致最终保留的不是用户最高得分记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:54:06