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)
});
答案 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)
我认为你的逻辑非常正确,唯一的问题是字符串Jan
,Feb
...不能在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);