提问人:JS_is_awesome18 提问时间:5/16/2022 更新时间:5/16/2022 访问量:381
如何在 JavaScript 数组中拆分日期字符串
How to split date strings in JavaScript array
问:
对于以下 Month/Day/Year 日期字符串数组...
const array1 = ["05/31/2022", "06/01/2022", "06/02/2022"]
...我正在尝试将数组配置为切片并删除所有日期字符串数组项(以 01 作为 Day 开头),如果它们紧跟在以 31 作为 Day 的日期字符串数组项之后。第 30 天和第 01 天的情况也是如此。
为了解决这个问题,我设置了一个 for 语句来遍历数组中的所有字符串。然后,我使用拆分方法从每个数组项中删除“/”,从而将 MM,DD,YYYY 分解为单独的变量。
for (let i = 0; i < array1.length; i++) {
var [month, day, year] = array1[i].split('/');
console.log(month, day, year)
}
我下一步的意图是设置一个条件,检查包含 30 或 31 作为“天”的数组项是否后跟包含 01 作为“天”的数组项,然后使用切片更快地删除后续日期 30 日或 31 日。对于这一部分,我尝试将月、日和年重新合并为单独的数组项目,如下所示:
const newArray = []
for (let i = 0; i < array1.length; i++) {
var [month, day, year] = array1[i].split('/');
newArray.push(month + day + year)
console.log(newArray)
}
带输出:
['05312022', '06012022', '06022022']
但是,我不确定如何设置一个条件来检查包含 30 或 31 作为“天”的数组项是否后跟包含 01 作为“天”的数组项。我该如何进行此类检查的功能?
答:
1赞
SSM
5/16/2022
#1
您可以遍历数组并获取 and,如果满足条件,则对数组进行切片并返回它。dates
currDay
prevDay
dates
const solution = (dates) => {
for (let i = 1; i < dates.length; i++) {
const currDay = dates[i].slice(3, 5);
const prevDay = dates[i - 1].slice(3, 5);
if ((currDay === "01") & (prevDay === "31" || prevDay === "30")) {
return dates.slice(0, i);
}
}
return dates;
};
console.log(solution(["05/31/2022", "06/01/2022", "06/02/2022"]));
0赞
PeterKA
5/16/2022
#2
以下我们esArray#reduce
- 保留所有元素,除非
- 保留的元素数等于正在考虑的索引,并且当前元素具有日期并跟在 a 或 a 之后
01
30
31
- 如果考虑的索引大于保留的项数,则表示至少跳过了一个元素,则也会跳过当前元素。
const array1 = ["05/31/2022", "06/01/2022", "06/02/2022"],
output = array1.reduce(
(prev,cur,i) =>
prev.length && ["30","31"].includes( prev.slice(-1)[0].slice(3,5) ) &&
(prev.length === i && cur.slice(3,5) === "01" || i > prev.length) ?
prev :
[...prev, cur],
[]
);
console.log( output );
下一个:同时检查字符串是否在切片中?
评论
["06/02/2022"]
["05/31/2022", "06/01/2022", "07/01/2022"]