有没有办法用JavaScript排序“季节年份”列表?

时间:2019-06-12 11:01:27

标签: javascript

我想对包含“ Spring 2008”,“ Spring 2009”等的数组进行排序。

我知道如何在python中做it。反正用JavaScript可以做到吗?

l = ['Fall 2014', 'Spring 2015', 'Fall 2008', 'Spring 2008', 'Summer 2008', 'Winter 2008']
def key(x):
    seas, year = x.split()
    return -int(year), seas != "Fall", seas != "Summer"
l.sort(key=key)
l.reverse()
print(l)

# OUTPUT : ['Winter 2008', 'Spring 2008', 'Summer 2008', 'Fall 2008', 'Fall 2014', 'Spring 2015']

2 个答案:

答案 0 :(得分:1)

您可以拆分字符串并从对象中获取几个月的值。

var months = { Spring: 1, Summer: 2, Fall: 3, Winter: 4 },
    data = ['Fall 2014', 'Spring 2015', 'Fall 2008', 'Spring 2008', 'Summer 2008', 'Winter 2008'];
    

data.sort((a, b) => {
    var aa = a.split(' '),
        bb = b.split(' ');
    return aa[1] - bb[1] || months[aa[0]] - months[bb[0]];
});

console.log(data);

答案 1 :(得分:1)

如果我们假设“ Winer”总是在“ Summer”之前,尽管在2008年6月1日和2008年12月1日可能相反,那么我将执行以下操作:

const src = ['Fall 2014', 'Spring 2015', 'Fall 2008', 'Spring 2008', 'Summer 2008', 'Winter 2008'];

const seasonToNum = str => ([season, year] = str.split(' '), year+(['Winter', 'Spring', 'Summer', 'Fall'].indexOf(season)+1)/4);

const res = src.sort((a,b) => seasonToNum(a) - seasonToNum(b));

console.log(res);