gpt4 book ai didi

javascript - 将 ISO 8601 日期的排序数组拆分为 Javascript 中每一天的新二维数组

转载 作者:行者123 更新时间:2023-11-30 13:55:11 24 4
gpt4 key购买 nike

我正在尝试将一个包含 ISO 8601 (UTC) 日期的排序数组拆分为一个二维数组,其中每一天都代表一个包含年/月/日匹配的所有日期的数组。

示例数组:

let dates = [
'2019-07-14T08:02:27Z',
'2019-07-05T17:22:34Z',
'2019-06-25T21:23:30Z',
'2019-06-25T16:46:55Z',
'2019-06-18T14:14:15Z',
'2019-06-18T13:09:07Z'
];

理想情况下,上述数组将创建以下二维数组:

let dates = [
['2019-07-14T08:02:27Z'],
['2019-07-05T17:22:34Z'],
['2019-06-25T21:23:30Z', '2019-06-25T16:46:55Z'],
['2019-06-18T14:14:15Z', '2019-06-18T13:09:07Z']
];

我已经尝试了很多方法,但为了提供一些代码,我对每个数组元素 date[i].substring(0, 10) 进行子字符串化,它返回年/月/一天,比如 2019-07-14 - 因为数组已排序,所以我比较了前一个元素和当前元素,并决定是否应将该元素添加到新数组中。

  let arr = [], temp = [];
for (let i = 0, prev = null; i < dates.length; i++) {
temp.push(dates[i]);

if (!(dates[i].substring(0, 10) === prev)) {
arr.push(temp);
temp = [];
}
prev = dates[i].substring(0, 10);
}

代码不工作,因为它在某些情况下被关闭了,例如:

[ '2019-07-14T08:02:27Z' ],
[ '2019-07-10T14:22:04Z' ],
[ '2019-07-09T16:08:22Z' ], // should be in below array
[
'2019-07-09T15:58:55Z',
'2019-07-09T14:41:49Z',
'2019-07-09T14:12:04Z',
'2019-07-09T14:10:29Z',
'2019-07-09T13:34:46Z',
'2019-07-09T13:28:14Z',
'2019-07-08T15:51:38Z' // conflicting dates
],
[ '2019-07-08T15:45:07Z', '2019-07-07T15:07:47Z' ], // conflicting dates

有什么建议吗?

最佳答案

您可以通过检查日期子字符串来减少数组。

let dates = ['2019-07-14T08:02:27Z', '2019-07-05T17:22:34Z', '2019-06-25T21:23:30Z', '2019-06-25T16:46:55Z', '2019-06-18T14:14:15Z', '2019-06-18T13:09:07Z'],
result = dates.reduce((r, s, i) => {
if (!i || r[r.length - 1][0].slice(0, 10) !== s.slice(0, 10)) r.push([]);
r[r.length - 1].push(s);
return r;
}, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 将 ISO 8601 日期的排序数组拆分为 Javascript 中每一天的新二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57434196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com