【问题标题】:Javascript - Sort months array in chronological order basis current monthJavascript - 根据当前月份按时间顺序对月份数组进行排序
【发布时间】:2019-11-26 17:35:11
【问题描述】:

我有一个 javascript 月份的列表。我想根据当前日期按时间顺序对其进行排序。

示例 monthsArr = ["March", "February", "November", "December", "January"]

如果当前月份是 11 月,排序后的数组应该是 ["Nov", "Dec", "Jan", "Feb", "Mar"]

如果当前月份是一月,排序后的数组应该是["Jan", "Feb", "Mar", "Nov", "Dec"]

不用担心转换为枚举或键值对。它可以处理。我正在寻找的是有关如何实现此排序功能的逻辑。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    我建议你获取当月的索引,
    然后使用数组切片从该索引开始重构数组:

    var m = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
    
    var cur = new Date().getMonth()
    
    var sorted = [...m.slice(cur), ...m.slice(0,cur)]
    
    console.log(sorted)

    【讨论】:

      【解决方案2】:

      像这样:

      var months =
      {
        January: 0,
        February: 1,
        March: 2,
        April: 3,
        May: 4,
        // et&c
        November: 10,
        December: 11
      };
      
      var monthsArr = ["March", "February", "November", "December", "January"];
      
      var month = new Date().getMonth();
      
      monthsArr.sort(function(m1, m2)
      {
        var n1 = months[m1], n2 = months[m2];
        if (n1 < month)
        {
          n1 = n1 + 12;
        }
        if (n2 < month)
        {
          n2 = n2 + 12;
        }
        return n1 - n2;
      });
      
      console.log(monthsArr);

      具有名称和月份编号的映射

      var months =
      {
        January: 0,
        February: 1,
        March: 2,
        April: 3,
        May: 4,
        // et&c
        November: 10,
        December: 11
      };
      

      获取当前月份

      var month = new Date().getMonth();
      

      对早于month 的月份加12 对数组进行排序。这会将它们放在与本月或以后相同的月份之后。

      monthsArr.sort(function(m1, m2)
      {
        var n1 = months[m1], n2 = months[m2];
        if (n1 < month)
        {
          n1 = n1 + 12;
        }
        if (n2 < month)
        {
          n2 = n2 + 12;
        }
        return n1 - n2;
      });
      

      【讨论】:

        【解决方案3】:

        您可以为月份值获取一个对象,并将所需月份作为第一个月份,并通过检查实际月份是否小于第一个月或按月份值进行排序。

        function sort(array, first) {
            var months = { January: 1, February: 2, March: 3, April: 4, May: 5, June: 6, July: 7, August: 8, September: 9, October: 10, November: 11, December: 12 };
            return array.sort((a, b) =>
                (months[a] < months[first]) - (months[b] < months[first]) ||
                months[a] - months[b]
            );
        }
        
        console.log(...sort( ["March", "February", "November", "December", "January"], "November"));
        console.log(...sort( ["March", "February", "November", "December", "January"], "January"));

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-23
          • 2014-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多