如何遍历array输出近7天角色level与当前日期的等级差值
近7天角色等级差值计算方案
核心逻辑
- 先计算近7天的时间边界:当前时间减去7天的毫秒数(
7*24*60*60*1000) - 从记录数组中筛选出所有时间早于7天边界的记录,取其中最新一条的等级作为7天前基准等级;如果没有更早的记录,基准值可按业务需求设置初始值(示例默认取0)
- 筛选出所有时间在近7天范围内的记录,按时间升序排序后取最后一条的等级作为当前等级;如果近7天无记录,当前等级等于基准等级
- 最终差值 = 当前等级 - 基准等级,正值为等级提升,负值为等级下降
示例代码(JavaScript)
// 传入等级记录数组,返回近7天等级差值 function get7DayLevelDiff(levelRecords) { // 1. 计算7天前的时间戳 const now = Date.now(); const sevenDaysAgo = now - 7 * 24 * 60 * 60 * 1000; // 2. 拆分记录为7天前、7天内两组 const before7dRecords = []; const in7dRecords = []; levelRecords.forEach(item => { const itemTime = new Date(item.date).getTime(); itemTime < sevenDaysAgo ? before7dRecords.push(item) : in7dRecords.push(item); }); // 3. 提取7天前基准等级 let baseLevel = 0; if (before7dRecords.length) { // 7天前的记录按时间降序,取最新一条的等级 before7dRecords.sort((a,b) => new Date(b.date).getTime() - new Date(a.date).getTime()); baseLevel = Number(before7dRecords[0].level); } // 4. 提取当前等级 let currentLevel = baseLevel; if (in7dRecords.length) { // 7天内的记录按时间升序,取最新一条的等级 in7dRecords.sort((a,b) => new Date(a.date).getTime() - new Date(b.date).getTime()); currentLevel = Number(in7dRecords[in7dRecords.length - 1].level); } return currentLevel - baseLevel; } // 用示例数组测试:假设当前时间为2020-01-03 12:00:00 const testArray = [{ "date": "2019-12-19 15:53:21", "level": "365" }, { "date": "2019-12-20 04:18:24", "level": "366" }, { "date": "2019-12-30 06:57:15", "level": "370" }, { "date": "2019-12-30 22:19:30", "level": "371" }, { "date": "2020-01-02 05:45:14", "level": "369" }, { "date": "2020-01-02 09:55:15", "level": "370" }, { "date": "2020-01-02 18:42:11", "level": "367" }, { "date": "2020-01-03 05:15:08", "level": "368" }]; console.log(get7DayLevelDiff(testArray)) // 输出2,对应从366级升到368级的差值
边界说明
- 近7天无等级变动记录时,差值返回0
- 无早于7天的历史记录时,可根据业务需求调整基准等级的初始默认值
- 若
level字段存在非数字值,可自行添加格式校验逻辑
内容的提问来源于stack exchange,提问作者Otávio C.
相关产品推荐
相关产品推荐

