如何拆分 JavaScript 数组中的日期字符串

How to split date strings in JavaScript array

对于以下 Month/Day/Year 日期字符串数组...

const array1 = ["05/31/2022", "06/01/2022", "06/02/2022"]

...我正在尝试将数组配置为切片并删除所有日期字符串数组项(从 01 作为日期开始),如果它们跟在日期字符串数组项之后,并且日期为 31。第 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 作为“天”的数组项,然后使用 slice 来删除后续日期更快 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 作为“天”的数组项。我怎样才能实现这种检查的功能?

您可以遍历 dates 数组并获取 currDayprevDay,如果满足条件,则切片 dates 数组和 return它。

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"]));

以下使用Array#reduce

  • 保留所有元素,除非
  • 保留的元素数等于正在考虑的索引,当前元素的日期为 01 并且跟在 3031
  • 之后
  • 如果所考虑的索引大于保留的项目数,意味着至少已跳过一个元素,则也将跳过当前元素。

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 );