javascript - 如何对充满对象的数组进行排序,每个对象都包含月-年格式的日期属性?

标签 javascript sorting date

<分区>

我有一个包含许多对象的数组,每个对象都具有以下格式的日期属性:{ date: 'December 2017' }。我想按降序对所有这些进行排序。我怎样才能做到这一点?

我试过使用辅助对象将每个月份的名称与其对应的数字相关联,然后将每个月份名称转换为新的日期进行排序。我成功地将每个对象转换为新的日期格式,但我不确定如何使用它对我的原始数组进行排序。

let dates = [{ date: 'December 2016' }, { date: 'December 2017' }, { date: 'November 2016' }, { date: 'August 2015' }, { date: 'June 2018' }, { date: 'May 2017' }];
let months = { "January": 1, "February": 2, "March": 3, "April": 4, "May": 5, "June": 6, "July": 7, "August": 8, "September": 9, "October": 10, "November": 11, "December": 12 };
let newDates = [];

for (var i = 0; i < dates.length; i++) {
  newDates.push(new Date(dates[i].date.replace(' ', ', ')))
}

newDates.sort((a, b) => {
  return b - a;
})

最佳答案

您可以采用填充的月份值并在获得 ISO 8601 后按字符串排序日期。

var dates = [{ date: 'December 2016' }, { date: 'December 2017' }, { date: 'November 2016' }, { date: 'August 2015' }, { date: 'June 2018' }, { date: 'May 2017' }],
    months = { "January": '01', "February": '02', "March": '03', "April": '04', "May": '05', "June": '06', "July": '07', "August": '08', "September": '09', "October": '10', "November": 11, "December": '12' };

dates.sort(({ date: a }, { date: b }) => {
    const getDate = s => s.split(' ').reduce((m, y) => [y, months[m]].join('-'));
    
    return getDate(a).localeCompare(getDate(b));
});

console.log(dates);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何对充满对象的数组进行排序,每个对象都包含月-年格式的日期属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55503778/

相关文章:

javascript - 检测引用源正则表达式

javascript - 无法将 jQuery 按钮提交更改为下拉选择并提交

java - 检查一个日期是否正好是 24 小时或更长时间

VBA:将日期格式化为美国标准

javascript - 使用 FSO.js 未捕获 TypeError

javascript - jQuery UI 自动完成提交 onclick 结果

java - 在单独的类中访问私有(private)变量?

Python基于2个类属性进行排序

vba - Excel VBA : sorting a table featuring cells with drop-down lists

php - 查找日期范围与指定日期范围相交的行