javascript - jQuery如何从字典中过滤两个日期和时间,并在新数组中分组
问题描述
我使用字典数组,在这里我存储一个时间戳。
所以我有一个表,我需要按时间存储数据。
我想按时间戳和日期过滤数据。
// Dictionary array:
var array = [
{ item: "item", category: "category", dateTime: "19/05/23 05:46:33" },
{ item: "item", category: "category", dateTime: "19/05/23 05:21:33" },
{ item: "item", category: "category", dateTime: "19/05/23 06:31:33" },
{ item: "item", category: "category", dateTime: "19/05/23 06:46:33" },
{ item: "item", category: "category", dateTime: "19/05/23 07:34:33" },
{ item: "item", category: "category", dateTime: "19/05/23 07:55:33" },
{ item: "item", category: "category", dateTime: "19/05/23 08:46:33" },
{ item: "item", category: "category", dateTime: "19/05/23 09:16:33" },
{ item: "item", category: "category", dateTime: "19/05/23 09:46:33" },
{ item: "item", category: "category", dateTime: "19/05/23 10:36:33" },
{ item: "item", category: "category", dateTime: "19/05/23 11:47:33" },
{ item: "item", category: "category", dateTime: "19/05/23 11:55:33" },
{ item: "item", category: "category", dateTime: "19/05/23 12:37:33" }
];
// And I have time periods, for ex:
var time = ["05:45 - 06:00", "06:00 - 07:00",
"07:00 - 08:00", "08:00 - 09:00", "09:00 - 10:00",
"10:00 - 11:00", "11:00 - 12:00", "12:00 - 13:00",
"13:00 - 14:00",];
//I try to use this method:
const groups = array.reduce((groups, item) => {
const date = item.dateTime.split('T')[0];
if (!groups[date]) {
groups[date] = [];
}
groups[date].push(item);
return groups;
}, {});
const groupArrays = Object.keys(groups).map((date) => {
return {
date,
games: groups[date]
};
});
console.log(groupArrays);
所以,最后,我想按小时接收分组日期。
最后我想收到:
var result = [
{ time: "05:45 - 06:00", groupedData:[
{ item: "item", category: "category", dateTime: "19/05/23 05:46:33" },
{ item: "item", category: "category", dateTime: "19/05/23 05:21:33" }
]
time: "06:00 - 07:00", groupedData:[
{ item: "item", category: "category", dateTime: "19/05/23 06:31:33" },
{ item: "item", category: "category", dateTime: "19/05/23 06:46:33" }
]
];
我真的被困住了,我厌倦了寻找解决方案。
解决方案
您需要解决日期格式以比较日期,我的解决方案仅包括小时,您可能需要在过滤器函数中包含分钟比较以获得准确的结果。
解释:
- 首先,我格式化了日期以便阅读和比较。
- 使用reduce函数获取分组数据。
- 包括一个过滤器函数,这样我们就可以在 reduce 函数中获取与当前值匹配的项目,并将项目推送到结果中。
- 输出结果
希望这可以帮助。
var array = [
{ item: "item", category: "category", dateTime: "19/05/23 05:46:33" },
{ item: "item", category: "category", dateTime: "19/05/23 05:21:33" },
{ item: "item", category: "category", dateTime: "19/05/23 06:31:33" },
{ item: "item", category: "category", dateTime: "19/05/23 06:46:33" },
{ item: "item", category: "category", dateTime: "19/05/23 07:34:33" },
{ item: "item", category: "category", dateTime: "19/05/23 07:55:33" },
{ item: "item", category: "category", dateTime: "19/05/23 08:46:33" },
{ item: "item", category: "category", dateTime: "19/05/23 09:16:33" },
{ item: "item", category: "category", dateTime: "19/05/23 09:46:33" },
{ item: "item", category: "category", dateTime: "19/05/23 10:36:33" },
{ item: "item", category: "category", dateTime: "19/05/23 11:47:33" },
{ item: "item", category: "category", dateTime: "19/05/23 11:55:33" },
{ item: "item", category: "category", dateTime: "19/05/23 12:37:33" }
];
var time = ["05:45 - 06:00", "06:00 - 07:00", "07:00 - 08:00", "08:00 - 09:00", "09:00 - 10:00", "10:00 - 11:00", "11:00 - 12:00", "12:00 - 13:00", "13:00 - 14:00",];
var formatedTime = time.map(function(val) {
return val.split(" - ");
});
var grouped = formatedTime.reduce((groups, currentValue, cI) => {
let min = parseInt(currentValue[0].substring(0,2));
let max = parseInt(currentValue[1].substring(0,2));
let filtered = array.filter(val => {
let validDate = val.dateTime.replace(/\//g,'-').replace(' ','T').replace('19','2019');
let date = new Date(validDate).getHours();
let result = false;
if(date >= min && date < max) {
return true;
} else {
return false;
}
});
let date = currentValue[0] + " - " + currentValue[1];
groups.push({
time: date,
groupedData: filtered
});
return groups;
}, []);
console.log(grouped);
推荐阅读
- laravel - 或者在 Eloquent livewire 中使用 And 语句
- python-3.x - 如何验证输入是否来自预先批准的列表?(Python)
- python - 将 Python 字典写入 CSV
- google-sheets - 如何通过谷歌表格上的 webhook 自动格式化输入到列中的日期值
- mybatis - 我们什么时候应该在 mybatis 中创建自定义 TypeHandler?
- setuptools - PyPI打包、命名空间包和子打包问题
- javascript - 在客户端的浏览器中打开(由 http get 产生的)PDF
- linux - Pthreads 和 QT
- ios - 使用 FCM 推送通知不工作 iOS
- python - 启动两个 cpu 阻塞侦听器并等待其中一个完成