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

JS动态年份数组生成:现有函数的高效优化方案问询

高效生成动态年份列表的优化方案

需求说明

需要生成包含当前年份、前3年、后4年的动态年份列表,列表开头必须添加一个空对象。预期的年份序列(以2023年为当前年为例)为 [2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027](原示例中的重复当前年是原代码合并后的冗余,最终需去重)。现有代码可运行但存在冗余,需优化实现效率。

现有冗余代码

const generateYears = () => {
  const previousYears = [...Array(4)].map(
    (a, b) => new Date().getFullYear() - b,
  );
  const futureYears = [...Array(5)].map((a, b) => new Date().getFullYear() + b);

  const years = new Set([...previousYears, ...futureYears].sort());

  const yearsObj = [...years].map((year: number) => {
    return {
      value: year.toString(),
      name: year.toString(),
    };
  });

  yearsObj.unshift({
    value: '',
    name: '',
  });

  return yearsObj;
};

优化后的实现方案

优化点

  • 避免重复调用new Date().getFullYear(),仅获取一次当前年份,减少性能开销
  • 直接生成连续年份范围,无需合并两个数组再去重,简化逻辑
  • 合并数组生成、格式转换、添加空对象的步骤,减少中间变量

优化代码

const generateYears = () => {
  const currentYear = new Date().getFullYear();
  // 生成从「当前年-3」到「当前年+4」的连续年份数组,共8个年份
  const yearRange = Array.from({ length: 8 }, (_, index) => currentYear - 3 + index);
  
  // 组合空对象与格式化后的年份对象数组
  return [
    { value: '', name: '' },
    ...yearRange.map(year => ({
      value: year.toString(),
      name: year.toString()
    }))
  ];
};

代码说明

  1. 先获取当前年份并存储,避免重复创建Date实例
  2. 使用Array.from直接生成目标年份范围:从currentYear - 3到currentYear + 4,长度为8,正好覆盖前3年、当前年、后4年
  3. 直接通过扩展运算符将空对象与映射后的年份对象数组组合,一步返回结果,逻辑更简洁高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:47:35