使用JavaScript从给定数据中筛选过去24小时内的数组元素
问题原因
你编写的代码存在两个核心错误:
filter方法的回调函数需要返回布尔值判断元素是否保留,你当前返回的是new Date()生成的日期对象,JS 中所有非空对象都会被判定为true,因此所有元素都被保留,这就是返回全部原始数据的直接原因- 你直接对字符串格式的
time_stamp做减法运算,JS 会尝试将时间格式的字符串转为数字,得到的结果是NaN,运算完全无效
正确实现思路
- 先计算当前时间往前推24小时的时间戳临界值
- 将每个元素的
time_stamp字符串转为可对比的时间戳,和临界值做大小对比,大于等于临界值的就是过去24小时内的有效数据
注意你示例中的测试数据都是2021年的,按当前时间运行所有数据都会被过滤,测试时可以手动修改临界值为对应时间节点验证效果,通用实现代码如下:
const Array_1 = [ { class_1: 4, HeadTeacher: "Mrs Joe", time_stamp: "2021-09-23 11:31:41" }, ]; const Array_2 = [ { class_1: 10, HeadTeacher: "Loveth", time_stamp: "2021-09-16 15:16:40" }, ]; const Array_3 = [ { class_1: 1, HeadTeacher: "Itunu", time_stamp: "2021-09-22 14:52:32" }, ]; const Array_4 = [ { class_1: 1, HeadTeacher: "John", time_stamp: "2021-09-21 07:07:30" }, ]; const result = [...Array_1, ...Array_2, ...Array_3, ...Array_4]; // 计算24小时前的时间戳临界值 const oneDayAgo = Date.now() - 86400 * 1000; const Final = result.filter(item => { // 将字符串格式的时间转为时间戳 const itemTime = new Date(item.time_stamp).getTime(); // 大于等于临界值说明属于过去24小时内的数据 return itemTime >= oneDayAgo; }); console.log(Final);
如果要验证示例中2021年的测试数据,可将oneDayAgo修改为new Date("2021-09-22 11:31:41").getTime(),运行后会返回Array_1和Array_3的两个元素,符合筛选逻辑。
内容的提问来源于stack exchange,提问作者simple life
相关产品推荐
相关产品推荐

