遍历用户登录日期数据集,统计全用户每日总登录次数
统计所有用户每日总登录次数解决方案
实现步骤
- 提取每个登录时间的年月日部分作为分组标识,确保同日登录记录被归类到同一组
- 用对象存储每日登录次数,键为日期字符串,值为累计次数
- 遍历所有用户的登录历史,逐个累加对应日期的计数
- 将最终的计数对象转换为指定的数组格式,并按日期排序
完整代码
const moment = require('moment'); // 确保已引入moment库 let people = [{ "loginHistory": ["2023-04-25T18:00:54.205+00:00", "2023-04-26T18:00:54.205+00:00", "2023-04-26T18:04:54.205+00:00", "2023-04-27T18:00:54.205+00:00"] }, { "loginHistory": ["2023-04-22T18:00:54.205+00:00", "2023-04-22T18:00:54.205+00:00", "2023-04-25T18:04:54.205+00:00", "2023-04-27T18:00:54.205+00:00"] } ]; // 用于存储每日登录次数的临时对象 const dailyCountMap = {}; // 遍历所有用户的登录记录 people.forEach(person => { if (!person.loginHistory) return; person.loginHistory.forEach(loginTime => { // 提取日期部分(YYYY-MM-DD)作为分组键 const dateKey = moment(loginTime).format('YYYY-MM-DD'); // 累加对应日期的登录次数 if (dailyCountMap[dateKey]) { dailyCountMap[dateKey]++; } else { dailyCountMap[dateKey] = 1; } }); }); // 将对象转换为指定的数组格式,并按日期排序 const dailyLoginCounts = Object.entries(dailyCountMap) .sort(([dateA], [dateB]) => new Date(dateA) - new Date(dateB)) .map(([date, value]) => ({ date: moment(date), value: value })); console.log(dailyLoginCounts);
代码解析
- 日期分组:通过
moment(loginTime).format('YYYY-MM-DD')统一日期格式,避免因时间部分不同导致的分组错误 - 计数累加:使用对象作为中间存储,比数组查找更高效,直接通过键值对操作完成计数
- 排序处理:最后将结果按日期升序排列,符合仪表盘数据展示的常规需求
输出结果
运行代码后会得到如下格式的数组:
[ { date: moment("2023-04-22"), value: 2 }, { date: moment("2023-04-25"), value: 2 }, { date: moment("2023-04-26"), value: 2 }, { date: moment("2023-04-27"), value: 2 } ]
内容的提问来源于stack exchange,提问作者The Old County
相关产品推荐
相关产品推荐

