javascript - 日期期间的计数
问题描述
我有一个这样的日期列表:
[ "2020-08-20", "2020-08-20", "2020-08-21", "2020-08-24", "2020-08-25", "2020-08-25", "2020-08-25", ]
我需要从这个列表中提取日期在日期升序中相同的范围。
例如,我的输出必须是:
{date: "2020-08-20", period: 1-2}, {date: "2020-08-21", period: 3-3}, {date: "2020-08-25", period: 4-4},
{date: "2020-08-25", period: 5-7}
或者只是:
{date: "2020-08-20", period: 1-2},{date: "2020-08-25", period: 5-7}
谁能帮我?我尝试对此使用库momentjs,但它不起作用:(
谢谢你的帮助
解决方案
考虑到您的排序日期示例,我会选择 2 指针解决方案:
对于场景 1:
var data = ["2020-08-20", "2020-08-20", "2020-08-21", "2020-08-24", "2020-08-25", "2020-08-25", "2020-08-25"];
let i = 0, j = 1;
var res = [];
while (i < data.length) {
if (data[i] == data[j]) {
j += 1;
//scan rest
while (data[i] == data[j]) {
j += 1;
}
j -= 1;
res.push({ date: data[i], period: (i + 1) + "-" + (j + 1) });
i = j + 1;
j = i + 1;
} else {
res.push({ date: data[i], period: (i + 1) + "-" + (i + 1) });
i += 1;
j += 1;
}
}
console.log(res);
对于场景 2:
var data = ["2020-08-20", "2020-08-20", "2020-08-21", "2020-08-24", "2020-08-25", "2020-08-25", "2020-08-25"];
let i = 0, j = 1;
var res = [];
while (i < data.length) {
if (data[i] == data[j]) {
j += 1;
while (data[i] == data[j]) {
j += 1;
}
j -= 1;
res.push({ date: data[i], period: (i + 1) + "-" + (j + 1) });
i = j + 1;
j = i + 1;
} else {
i += 1;
j += 1;
}
}
console.log(res);
推荐阅读
- javascript - 在javascript中结合对象的两个属性
- c# - ASP.NET Web 表单不允许多个并发请求
- mysql - MySQL 查询 - 取消 ORDER BY 使查询速度提高 100 倍
- php - laravel 和 apache mod_status
- read-the-docs - AttributeError: '_NamespacePath' object has no attribute 'sort' on Read the docs
- c - 如何在不使用 for 循环的情况下填充二维数组?
- windows - 带有不带引号的回显的 Makefile 错误
- regex - 之后如何使用正则表达式从带有可选字符串的字符串中提取字符?
- dynamics-crm - Dynamics CRM 上线,抛出 System.Security.Permissions.KeyContainerPermission
- multithreading - 如何在不影响应用程序安全的情况下使用 websockets 超时?