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

遍历用户登录日期数据集,统计全用户每日总登录次数

统计所有用户每日总登录次数解决方案

实现步骤

  1. 提取每个登录时间的年月日部分作为分组标识,确保同日登录记录被归类到同一组
  2. 用对象存储每日登录次数,键为日期字符串,值为累计次数
  3. 遍历所有用户的登录历史,逐个累加对应日期的计数
  4. 将最终的计数对象转换为指定的数组格式,并按日期排序

完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:57:45