如何在JavaScript中按Title及当前周时间多条件分组求和?
按标题分组并统计本周Positive总和
原始数据
[ { "Id": 1, "Title": "Title_1", "Positive": 5, "CreateTs": 1674231433428 }, { "Id": 2, "Title": "Title_1", "Positive": 8, "CreateTs": 1674288139000 }, { "Id": 3, "Title": "Title_2", "Positive": 5, "CreateTs": 1674633970000 }, { "Id": 4, "Title": "Title_1", "Positive": 12, "CreateTs": 1674649613000 }, { "Id": 5, "Title": "Title_1", "Positive": 10, "CreateTs": 1674649741000 } ]
期望输出
[ { "Title": "Title_1", "Positive_sum": 22 }, { "Title": "Title_2", "Positive_sum": 5 } ]
解决方案(JavaScript)
核心逻辑
- 筛选出属于当前周的数据项
- 按
Title分组,累加每组的Positive值
完整代码
// 判断时间戳是否在当前周(默认周一为一周起始,可自行调整) function isInCurrentWeek(timestamp) { const now = new Date(); // 计算当前周周一的0点时刻 const weekStart = new Date(now.setDate(now.getDate() - now.getDay() + 1)); weekStart.setHours(0, 0, 0, 0); // 计算当前周周日的23:59:59时刻 const weekEnd = new Date(weekStart); weekEnd.setDate(weekEnd.getDate() + 6); weekEnd.setHours(23, 59, 59, 999); const targetTime = new Date(timestamp); return targetTime >= weekStart && targetTime <= weekEnd; } // 原始数据 const rawData = [ {"Id":1,"Title":"Title_1","Positive":5,"CreateTs":1674231433428}, {"Id":2,"Title":"Title_1","Positive":8,"CreateTs":1674288139000}, {"Id":3,"Title":"Title_2","Positive":5,"CreateTs":1674633970000}, {"Id":4,"Title":"Title_1","Positive":12,"CreateTs":1674649613000}, {"Id":5,"Title":"Title_1","Positive":10,"CreateTs":1674649741000} ]; // 分组求和 const groupedResult = Object.values(rawData.reduce((acc, item) => { // 跳过非本周的数据 if (!isInCurrentWeek(item.CreateTs)) return acc; const title = item.Title; // 初始化分组项 if (!acc[title]) { acc[title] = { Title: title, Positive_sum: 0 }; } // 累加Positive值 acc[title].Positive_sum += item.Positive; return acc; }, {})); console.log(groupedResult);
代码说明
- 周起始调整:如果需要以周日为一周起始,把
now.getDay() + 1改成now.getDay()即可。 - 兼容性:代码基于原生JavaScript,无需依赖第三方库,可直接在浏览器或Node.js环境运行。
- 可靠性:不受原始数据顺序影响,只要时间戳符合条件就会被统计。
内容的提问来源于stack exchange,提问作者happy happy
相关产品推荐
相关产品推荐

