排序月份jquery的数组

时间:2017-11-07 07:34:30

标签: javascript sorting momentjs

var monthYear = ["Jan-2016", "Jul-2015", "Jul-2016", "Mar-2016", "Aug-2016", "Mar-2015"];

我希望它被排序:

[ "Mar-2015", "Jul-2015", "Jan-2016", "Mar-2016", "Jul-2016", "Aug-2016" ]

我关注的代码

var sorted = monthYear.sort(function(a,b) {
    a = a.split("-");
    b = b.split("-")
    return new Date(a[1], a[0], 1) - new Date(b[1], b[0], 1)
});

3 个答案:

答案 0 :(得分:1)

如果moment.js是一个选项,只需用它解析你的字符串:

var sorted = monthYear.sort(function(a,b) {
    return +moment(a,'MMM-YYYY') - moment(b,'MMM-YYYY');
});

答案 1 :(得分:0)

构造函数不能解决这几个月的短版本。

您可以使用短版本及其各自的名称创建一个JSON对象,并按键的值排序。

var monthYear = ["Jan-2016", "Jul-2015", "Jul-2016", "Mar-2016", "Aug-2016", "Mar-2015"];

var months = {
  Jan: "January",
  Feb: "February",
  Mar: "March",
  Apr: "April",
  May: "May",
  Jun: "June",
  Jul: "July",
  Aug: "August",
  Sep: "September",
  Oct: "October",
  Nov: "November",
  Dec: "December"
}

var sorted = monthYear.sort(function(a,b) {
    a = a.split("-");
    b = b.split("-")
    return new Date(months[a[0]] + a[1]) - new Date(months[b[0]] + b[1])
});

希望它有所帮助。

答案 2 :(得分:0)

我认为你的逻辑非常正确,唯一的问题是字符串JanFeb ...不能在Date()构造函数中使用,因为它接受了number表示月份值。

您可以做的是使用包含这些月份值的所有相应数字的对象,并在排序函数中使用它:

var months = {Jan : 1, Feb: 2, Mar: 3, Apr: 4, May: 5, Jun: 6, Jul: 7, Aug: 8, Sep: 9, Oct: 10, Nov: 11, Dec: 12};

在你的排序函数中写:

var sorted = monthYear.sort(function(a, b) {
  a = a.split("-");
  b = b.split("-")
  return new Date(a[1], monthsObject[a[0]] - 1, 1) - new Date(b[1], monthsObject[b[0]] - 1, 1)
});

<强>演示:

var monthYear = ["Jan-2016", "Jul-2015", "Jul-2016", "Mar-2016", "Aug-2016", "Mar-2015"];

var months = {
  Jan: 1,
  Feb: 2,
  Mar: 3,
  Apr: 4,
  May: 5,
  Jun: 6,
  Jul: 7,
  Aug: 8,
  Sep: 9,
  Oct: 10,
  Nov: 11,
  Dec: 12
};

var sorted = monthYear.sort(function(a, b) {
  a = a.split("-");
  b = b.split("-")
  return new Date(a[1], monthsObject[a[0]] - 1, 1) - new Date(b[1], monthsObject[b[0]] - 1, 1)
});
console.log(sorted);