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

如何校验对象数组日期格式并按日期升序排序?

日期格式校验与数组排序实现

需求说明

  • 校验数组内所有对象的category字段是否严格符合YYYY-MM-DD格式
  • 若全部符合,将数组按日期从早到晚排序;只要有一个不符合,不执行排序操作

原代码的问题点

  1. 校验函数参数缺失:checkIfDateIsInRightFormat未定义入参dateStr,且调用时传入的是整个对象而非对象的category属性
  2. 遍历方法拼写错误:使用了错误的foreach,正确应为forEach
  3. 校验结果判断逻辑错误:every方法内的判断逻辑无效,只需直接验证每个元素是否为true即可
  4. 排序逻辑错误:将日期字符串直接转数字相减会得到NaN,无法正确排序;YYYY-MM-DD格式的字符串可直接按字典序比较,或通过Date对象时间戳比较

正确实现代码

1. 完善日期格式校验函数

确保格式匹配正则,同时排除无效日期(如2023-02-30这类不存在的日期)

function checkIfDateIsInRightFormat(dateStr) {
  // 匹配YYYY-MM-DD格式的正则
  const regex = /^\d{4}-\d{2}-\d{2}$/;
  if (!regex.test(dateStr)) {
    return false;
  }

  // 验证日期合法性,排除无效日期
  const date = new Date(dateStr);
  return date instanceof Date && !isNaN(date) && date.toISOString().slice(0, 10) === dateStr;
}

2. 完整的校验与排序逻辑

const arrayData = [
  { "category": "2019-07-24", "total": 1, "Col 1": 100 },
  { "category": "2018-11-12", "total": 3, "Col 1": 101 },
  { "category": "2019-07-11", "total": 1, "Col 1": 200 },
  { "category": "2019-08-11", "total": 1, "Col 1": 153 },
  { "category": "2019-09-25", "total": 1, "Col 1": 198 }
];

// 1. 校验所有category的格式
const allValid = arrayData.every(item => checkIfDateIsInRightFormat(item.category));

if (allValid) {
  // 2. 按日期从早到晚排序:两种可选方法
  arrayData.sort((objA, objB) => {
    // 方法1:直接利用YYYY-MM-DD字符串的字典序特性比较
    return objA.category.localeCompare(objB.category);
    // 方法2:通过Date时间戳比较,兼容性更强
    // return new Date(objA.category).getTime() - new Date(objB.category).getTime();
  });
  console.log('排序后的数组:', arrayData);
} else {
  console.log('存在不符合格式的日期,不执行排序');
}

测试用例验证

  • 当数组包含非法值(如"ABC")时,allValid为false,不会执行排序
  • 全部合法时,排序结果与预期一致:
    [
      { "category": "2018-11-12", "total": 3, "Col 1": 101 },
      { "category": "2019-07-11", "total": 1, "Col 1": 200 },
      { "category": "2019-07-24", "total": 1, "Col 1": 100 },
      { "category": "2019-08-11", "total": 1, "Col 1": 153 },
      { "category": "2019-09-25", "total": 1, "Col 1": 198 }
    ]
    

内容的提问来源于stack exchange,提问作者Beginner_Hello

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:25:22