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

如何对JavaScript嵌套数组先按日期升序再按姓氏升序排序

正确实现代码

sets.sort((a, b) => {
  // 工具方法:将MM/DD/YYYY格式的日期转为时间戳用于比较
  const getDateStamp = (dateStr) => {
    const [month, day, year] = dateStr.split('/');
    return new Date(`${year}-${month}-${day}`).getTime();
  }

  // 优先比较日期:升序排列
  const dateDiff = getDateStamp(a[3]) - getDateStamp(b[3]);
  if (dateDiff !== 0) {
    return dateDiff;
  }

  // 日期相同则按姓氏升序排列
  return a[0].localeCompare(b[0]);
});

逻辑说明

  • 直接对整个sets数组调用原生sort方法即可,不需要遍历子数组,排序过程只会调整子数组的先后顺序,不会修改每个子数组内部的字段位置,完全符合你的需求。
  • 比较逻辑自动实现多级判断:先按日期升序排列,日期相等时自动触发姓氏排序规则,不需要写死特定日期判断,所有同日期的条目都会按姓氏排序。

你之前代码的问题

  1. 第一个写法报错是因为arr[3]是字符串类型,只有数组才有sort方法,你尝试给单个字符串执行排序操作必然报错。同时排序是针对整个sets数组的子元素顺序调整,不需要用map遍历每个子数组单独处理。
  2. 第二个写法逻辑错误:你在遍历每个子元素的过程中反复对整个sets数组执行排序,且判断条件写死了固定日期,不具备通用性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 17:18:02