You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript从给定数据中筛选过去24小时内的数组元素

问题原因

你编写的代码存在两个核心错误:

  • filter 方法的回调函数需要返回布尔值判断元素是否保留,你当前返回的是 new Date() 生成的日期对象,JS 中所有非空对象都会被判定为 true,因此所有元素都被保留,这就是返回全部原始数据的直接原因
  • 你直接对字符串格式的 time_stamp 做减法运算,JS 会尝试将时间格式的字符串转为数字,得到的结果是 NaN,运算完全无效

正确实现思路

  1. 先计算当前时间往前推24小时的时间戳临界值
  2. 将每个元素的 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:57:01