jquery - 如何对以 YYYY-M 格式字符串化的日期数组进行排序?

标签 jquery arrays sorting

我有一个包含字符串的数组,如下所示:

["2013-1", "2013-10", "2013-11", "2013-12", "2013-2", "2013-3", "2013-4", "2014-1", "2014-2", "2014-3"]

我正在尝试对它们进行排序,使它们看起来像:

["2013-1", "2013-2", "2013-3", "2013-4", "2013-10", "2013-11", "2013-12", "2014-1", "2014-2", "2014-3"]

我已经检查了很多有关此主题的线程,但没有一个解决方案对我有用。

使用this问题的答案我的数组根本没有改变。

var myArray =  ["2013-1", "2013-10", "2013-11", "2013-12", "2013-2", "2013-3", "2013-4", "2014-1", "2014-2", "2014-3"]
    myArray.sort(function(a,b) {
      if (isNaN(a) || isNaN(b)) {
        return a > b ? 1 : -1;
      }
      return a - b;
    });

似乎找不到一种方法可以轻松做到这一点,有什么想法可以实现它吗?

最佳答案

问题在于,字符串数组中不仅仅是数字,每个字符串中有两个数字。有很多可能的方法,您可以将值解析为日期,可以将值解析为两个数字,可以将值拆分为字符串和数字等。

我建议的方法是将每个字符串转换为可排序以便比较的格式,即将 "2013-1" 这样的字符串转换为 2013-01。由于字符串中的每个组件都具有相同的长度,并且组件的重要性不断下降,因此您可以将它们作为字符串进行比较:

myArray.sort(function(a,b) {
  var x = a.replace(/(-\d$)/, '-0$1');
  var y = b.replace(/(-\d$)/, '-0$1');
  return (
    x > y ? 1 :
    x < y ? -1 :
    0
  );
});

var myArray = ["2013-1", "2013-10", "2013-11", "2013-12", "2013-2", "2013-3", "2013-4", "2014-1", "2014-2", "2014-3"];

myArray.sort(function(a,b) {
  var x = a.replace(/(-\d$)/, '-0$1');
  var y = b.replace(/(-\d$)/, '-0$1');
  return (
    x > y ? 1 :
    x < y ? -1 :
    0
  );
});

// output result in StackOverflow snippet
document.write(JSON.stringify(myArray));

关于jquery - 如何对以 YYYY-M 格式字符串化的日期数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27377584/

相关文章:

javascript - 我可以使用 JavaScript 打开选择框吗?

javascript - jQuery 通过单击页面上的任意位置关闭 DIV

javascript - 转换用 data() 保存的字符串形式对象

c# - 如何对环绕的数字序列进行排序

angular - 在 Angular 4 中使用 trackBy 对 *ngFor 数组进行排序

javascript - 如何将选择从一个选择复制到另一个选择?

arrays - MongoDB - 更新多个数组中的元素

c++ - 如何将二维数组传递给函数以及如何调用它

c - 我的数组正在被相同的值覆盖?

javascript - Vue搜索过滤默认显示所有项目