首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对按YYYY格式排列的日期数组进行排序?

如何对按YYYY格式排列的日期数组进行排序?
EN

Stack Overflow用户
提问于 2014-12-09 11:14:51
回答 3查看 100关注 0票数 1

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

代码语言:javascript
复制
["2013-1", "2013-10", "2013-11", "2013-12", "2013-2", "2013-3", "2013-4", "2014-1", "2014-2", "2014-3"]

我试着把它们分类,让它们看起来像:

代码语言:javascript
复制
["2013-1", "2013-2", "2013-3", "2013-4", "2013-10", "2013-11", "2013-12", "2014-1", "2014-2", "2014-3"]

我已经在这个主题上查看了一堆线程,但是没有一个解决方案对我有用。

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

代码语言:javascript
复制
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;
    });

似乎找不到一种容易做到的方法,有什么办法可以实现吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-09 11:20:39

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

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

代码语言:javascript
复制
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
  );
});

代码语言:javascript
复制
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));

票数 2
EN

Stack Overflow用户

发布于 2014-12-09 11:30:27

这样做的方式之一是:

代码语言:javascript
复制
myArray.sort(function (a, b) {
    a = a.split("-");
    b = b.split("-");
    var montha = parseInt(a[1]),
        monthb = parseInt(b[1]);
    a = parseInt(a[0]);
    b = parseInt(b[0]);
    if (a === b) {
        return (montha - monthb);
    }
    return a - b;
});

See DEMO here.

票数 1
EN

Stack Overflow用户

发布于 2014-12-09 11:38:53

下面是一种函数式编程方法:将字符串映射到由两个数字组成的数组,对数组进行排序(容易得多),然后映射回字符串。

代码语言:javascript
复制
var input = ["2013-1", "2013-10", "2013-11", "2013-12", "2013-2", "2013-3", "2013-4", "2014-1", "2014-2", "2014-3"];
var output = input
  .map(function (val) {
    return val.split("-").map(Number);
  })
  .sort(function (a, b) {
    return a[0] - b[0] || a[1] - b[1];
  })
  .map(function (val) {
    return val.join("-");
  });

演示:http://jsbin.com/fekiruzose/2/edit?js,console

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27377584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档