如何用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
相关产品推荐
相关产品推荐

