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

如何用JS/jQuery将事件评论JSON转为以event_id为索引的多维数组

解决按event_id分组评论数组的问题

这问题我熟!要把你拿到的评论数组按event_id分组,转换成以event_id为索引的结构,用JavaScript的reduce方法就能轻松搞定,我给你一步步讲清楚:

核心实现思路

我们需要遍历原始评论数组,把每个评论根据它的event_id归类到对应的数组里,最终生成一个以event_id为键、对应评论数组为值的对象。

具体代码实现

基础版实现(可读性强)

先定义你的原始数据,再用reduce处理:

// 你的原始评论数据
const reviews = [
  {"id":"3","reviewer_id":"4","event_id":"3","review":"a"},
  {"id":"19","reviewer_id":"3","event_id":"4","review":"b"},
  {"id":"20","reviewer_id":"1","event_id":"4","review":"b"}
];

// 用reduce分组
const groupedByEventId = reviews.reduce((acc, currentReview) => {
  // 取出当前评论的event_id
  const eventId = currentReview.event_id;
  
  // 如果当前event_id还没在累加器里,初始化一个空数组
  if (!acc[eventId]) {
    acc[eventId] = [];
  }
  
  // 把当前评论添加到对应event_id的数组中
  acc[eventId].push(currentReview);
  
  // 返回累加器,继续下一次遍历
  return acc;
}, {}); // 初始值是一个空对象

// 打印结果看看
console.log(groupedByEventId);

简化版实现(ES6语法)

如果想写得更简洁,可以用逻辑或赋值来简化判断:

const groupedByEventId = reviews.reduce((acc, curr) => {
  const eventId = curr.event_id;
  // 逻辑或赋值:如果acc[eventId]不存在就初始化为空数组
  acc[eventId] = acc[eventId] || [];
  acc[eventId].push(curr);
  return acc;
}, {});

超简洁版(展开语法)

还有一种更紧凑的写法,但注意数据量大时性能不如前两种(因为每次都会创建新数组),适合小数据集:

const groupedByEventId = reviews.reduce((acc, curr) => ({
  ...acc,
  [curr.event_id]: [...(acc[curr.event_id] || []), curr]
}), {});

最终输出结果

不管用哪种写法,最终都会得到这样的结构:

{
  "3": [{"id":"3","reviewer_id":"4","event_id":"3","review":"a"}],
  "4": [
    {"id":"19","reviewer_id":"3","event_id":"4","review":"b"},
    {"id":"20","reviewer_id":"1","event_id":"4","review":"b"}
  ]
}

这样你就可以通过groupedByEventId['3']直接拿到event_id为3的所有评论啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:00:50