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

如何用sort()方法对二维JavaScript数组按名称及日期排序?

当然可以用sort()实现这个嵌套数组的排序需求!

JavaScript的Array.sort()方法支持自定义比较函数,正好能满足你“先按名称字母序,再按日期从旧到新”的排序优先级。下面是具体的实现方案:

核心实现代码

const originalArray = [['BBB','2020-10-20'],['AAA','2020-10-25'],['BBB','2020-10-19'],['EEE','2020-11-19'],['AAA','2020-10-10']];

// 自定义排序比较函数
const sortedArray = originalArray.sort((a, b) => {
  // 第一步:按名称的字母顺序比较
  const nameDiff = a[0].localeCompare(b[0]);
  
  // 如果名称不同,直接用名称的比较结果排序
  if (nameDiff !== 0) {
    return nameDiff;
  }
  
  // 第二步:名称相同时,按日期从旧到新排序
  // 利用YYYY-MM-DD格式的字符串字典序与日期顺序一致的特性,直接比较字符串
  return a[1].localeCompare(b[1]);
  
  // 或者用Date对象比较(兼容性更强,适合非标准日期格式):
  // return new Date(a[1]) - new Date(b[1]);
});

console.log(sortedArray);
// 输出结果:
// [['AAA','2020-10-10'],['AAA','2020-10-25'],['BBB','2020-10-19'],['BBB','2020-10-20'],['EEE','2020-11-19']]

代码逻辑解释

  1. 名称排序:使用String.localeCompare()方法比较两个名称字符串,它会返回负数(a排在b前)、0(相等)、正数(b排在a前),完美适配sort()的比较函数要求。如果需要忽略大小写,可以添加参数:a[0].localeCompare(b[0], undefined, { sensitivity: 'base' })。
  2. 日期排序:因为你的日期是YYYY-MM-DD格式,这种格式的字符串字典序和实际日期顺序完全一致,所以直接用localeCompare()比较字符串就足够高效。如果遇到非标准格式的日期,再用new Date()转成日期对象后相减,旧日期的时间戳更小,相减后返回负数,会排在前面。

注意事项

  • Array.sort()是原地排序,会修改原数组。如果不想修改原数组,可以先复制一份再排序:[...originalArray].sort(...)或者originalArray.slice().sort(...)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:43:02