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

如何在JavaScript中按用户分组对象?

按用户ID分组数据的实用解决方案

嘿,这个需求太常见了!我给你用JavaScript写个高效的实现方案,几步就能把原始数据按ID分组搞定:

1. 先理清楚思路

我们可以用数组的reduce方法遍历原始数据,把每个数据项以ID为键,收集到对应的数组中,最终得到一个以用户ID为键、对应数据列表为值的对象。

2. 完整代码示例

模拟原始数据库数据

先补全你给出的原始数据格式(方便演示):

const rawData = [
  { 
    ID: 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35', 
    value: 13.450980186462402, 
    created: '2018-05-02T13:21:19.960Z' 
  },
  { 
    ID: '5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9', 
    value: 13.450980186462402, 
    created: '2018-05-02T13:21:24.179Z' 
  },
  { 
    ID: 'd4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35', 
    value: 15.2345, 
    created: '2018-05-03T09:15:00.000Z' 
  },
  { 
    ID: '6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b', 
    value: 9.876, 
    created: '2018-05-02T14:30:45.500Z' 
  }
];

核心分组代码

就几行,逻辑清晰易懂:

const groupedByUser = rawData.reduce((acc, currentItem) => {
  // 如果当前ID还没在累加器里,先初始化一个空数组
  if (!acc[currentItem.ID]) {
    acc[currentItem.ID] = [];
  }
  // 把当前数据项的value和created添加到对应ID的数组中
  acc[currentItem.ID].push({
    value: currentItem.value,
    created: currentItem.created
  });
  return acc;
}, {}); // 初始值是空对象

分组后的结果

运行后groupedByUser的结构会是这样的:

{
  "d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35": [
    { "value": 13.450980186462402, "created": "2018-05-02T13:21:19.960Z" },
    { "value": 15.2345, "created": "2018-05-03T09:15:00.000Z" }
  ],
  "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9": [
    { "value": 13.450980186462402, "created": "2018-05-02T13:21:24.179Z" }
  ],
  "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b": [
    { "value": 9.876, "created": "2018-05-02T14:30:45.500Z" }
  ]
}

3. 额外优化(可选)

如果需要把结果转换成数组形式(比如每个元素是{ userId: 'xxx', records: [...] }),可以用Object.entries再处理一遍:

const groupedArray = Object.entries(groupedByUser).map(([userId, records]) => ({
  userId,
  records
}));

这个方案只需要遍历一次原始数组,不管数据量多大都能高效处理,完全满足你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:02:01