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

JavaScript:如何从日期字符串数组中按顺序提取不重复年份?

问题解答:提取年份并升序排序

嘿,好问题!咱们直接切入正题:

是否需要转换成new Date()格式再排序?

完全没必要!转成Date对象属于绕远路,不仅会增加不必要的性能开销,还可能因为不同环境对日期字符串的解析差异(比如时区、格式兼容问题)踩坑。咱们的需求只是提取年份字符串,直接操作字符串就够了,简单又高效。

最佳实现方式

核心思路是提取年份→去重→排序,用ES6+的语法可以写得非常简洁清晰:

代码示例

const array1 = ['9/2022','7/2020','11/2021','12/2020','2/2020','4/2021','10/2021'];

// 链式调用的简洁写法
const result = [...new Set(array1.map(item => item.split('/')[1]))]
  .sort((a, b) => Number(a) - Number(b));

console.log(result); // 输出: ['2020','2021','2022']

步骤拆解

  1. 提取年份:用map遍历数组,对每个元素用split('/')分割成[月份, 年份],取索引为1的部分就是年份字符串
  2. 去重:把提取到的年份数组传入Set(Set会自动剔除重复值),再用扩展运算符[...]把Set转回数组
  3. 排序:用sort方法,把年份字符串转成数字后做减法,实现升序排序(避免默认字符串排序的潜在问题)

额外建议

  • 如果担心原数组的格式不统一(比如有的元素不是月/年格式),可以加个简单的校验,避免报错:
    const years = array1.map(item => {
      const parts = item.split('/');
      return parts.length === 2 ? parts[1] : ''; // 格式不对的话返回空串,后续可以过滤掉
    }).filter(year => year); // 过滤空串
    
  • 要是需要兼容ES5及以下的旧环境,可以把Set去重换成filter写法:
    const uniqueYears = years.filter((year, index) => years.indexOf(year) === index);
    
  • 排序时一定要转成数字再比较!虽然4位年份的字符串排序结果和数字排序一致,但如果遇到短年份(比如'20'和'2020'),默认字符串排序就会出错,转数字排序更通用可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:27:38