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

请求协助:按userId分组重构JSON数据

按userId分组JSON数组的实现方案

给定包含用户对象的JSON数组,要将其按userId字段分组,把相同userId的对象归到同一数组下,最终生成以userId为键、对应对象数组为值的对象,以下是几种实用实现方法:

方法一:使用Array.reduce()(推荐)

reduce是处理数组分组最简洁的方式之一,通过累加器逐步构建目标对象:

const originalData = [
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  },
  {
    "userId": 2,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
  },
  {
    "userId": 3,
    "id": 3,
    "title": "ea molestias quasi exercitationem repellat qui ipsa sit aut",
    "body": "et iusto sed quo iure\nvoluptatem occaecati omnis eligendi aut ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius odio et labore et velit aut"
  }
];

const groupedData = originalData.reduce((acc, current) => {
  const userId = current.userId;
  // 若当前userId未在累加器中,初始化空数组
  if (!acc[userId]) {
    acc[userId] = [];
  }
  // 将当前对象推入对应数组
  acc[userId].push(current);
  return acc;
}, {});

console.log(groupedData);

方法二:使用Array.forEach()

逻辑与reduce一致,通过遍历数组手动构建分组对象,更直观易懂:

const groupedData = {};

originalData.forEach(item => {
  const userId = item.userId;
  if (!groupedData[userId]) {
    groupedData[userId] = [];
  }
  groupedData[userId].push(item);
});

console.log(groupedData);

方法三:使用Map结构(适合保留键类型)

如果需要保留userId的数字类型(普通对象的键会自动转为字符串),可以先用Map存储,再转成对象:

const map = new Map();

originalData.forEach(item => {
  const userId = item.userId;
  if (!map.has(userId)) {
    map.set(userId, []);
  }
  map.get(userId).push(item);
});

// 将Map转换为普通对象
const groupedData = Object.fromEntries(map);

console.log(groupedData);

以上三种方法都能生成你需要的分组结构,执行后每个userId对应的数组会包含所有该用户的对象。

内容的提问来源于stack exchange,提问作者The IT gal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:45:28