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

JavaScript中遍历字典数组判断日期子串存在性并执行后续操作

解决方案

基础实现(直接使用字符串匹配)

利用数组的some()方法,该方法会遍历数组,只要有一个元素满足条件就立即返回true,非常适合判断"是否存在符合条件的元素":

const currentDate = '2022-01-26';
// 判断数组中是否存在date包含currentDate的假日
const isPublicHoliday = arr.some(d => d.date.includes(currentDate));

// 根据结果执行对应操作
if (isPublicHoliday) {
  // 这里写关闭电话线路的逻辑
  console.log('今日是公共假日,关闭电话线路');
} else {
  console.log('今日正常营业');
}

为什么不用forEach?

forEach只是单纯遍历数组,无法直接返回"是否存在符合条件元素"的布尔值。你需要额外声明一个变量来记录状态,比如:

let isPublicHoliday = false;
arr.forEach(d => {
  if (d.date.includes(currentDate)) {
    isPublicHoliday = true;
    // 即使找到也无法提前终止遍历,效率不如some
  }
});

if (isPublicHoliday) {
  // 执行操作
}

显然some()更简洁高效,找到匹配项后会立即停止遍历。


结合moment-timezone的精准版本

字符串匹配存在潜在风险(比如currentDate为2022-01时会误匹配所有1月的日期),用moment-timezone可以精准处理时区和日期比较:

  1. 先安装依赖:
npm install moment-timezone
  1. 实现代码:
const moment = require('moment-timezone');

const currentDate = '2022-01-26';
// 设定目标时区(以澳大利亚悉尼为例,根据实际业务调整)
const targetTimezone = 'Australia/Sydney';
// 将currentDate转为对应时区的"当日起始时刻"moment对象
const targetMoment = moment.tz(currentDate, 'YYYY-MM-DD', targetTimezone).startOf('day');

// 精准判断是否存在当日公共假日
const isPublicHoliday = arr.some(d => {
  // 解析假日的date字段,转为对应时区的"当日起始时刻"
  const holidayMoment = moment.tz(d.date, 'YYYY-MM-DD HH:mm:ss', targetTimezone).startOf('day');
  // 比较两个日期是否完全相同(仅比较年/月/日)
  return holidayMoment.isSame(targetMoment);
});

if (isPublicHoliday) {
  console.log('今日为公共假日,关闭电话线路');
  // 执行关闭线路的具体逻辑
} else {
  console.log('今日正常运营');
}

扩展:获取当日假日详情

如果需要知道具体是哪个假日,可以用find()方法:

const todayHoliday = arr.find(d => {
  const holidayMoment = moment.tz(d.date, 'YYYY-MM-DD HH:mm:ss', targetTimezone).startOf('day');
  return holidayMoment.isSame(targetMoment);
});

if (todayHoliday) {
  console.log(`今日是${todayHoliday.name},关闭电话线路`);
} else {
  console.log('今日正常营业');
}

内容的提问来源于stack exchange,提问作者Zhan Mushi Goate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:35:27