当前位置: 首页 > 知识库问答 >
问题:

如何排序充满对象的数组,每个对象都包含月年格式的日期属性?[重复]

花和宜
2023-03-14

我有一个数组,其中包含许多对象,每个对象都有以下格式的日期属性:{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;
})

共有2个答案

越安翔
2023-03-14

一个简单的开始就是这样做,wich效率不高,但如果您的阵列不是很大,则应该可以:

let dates = [{ date: 'December 2016' }, { date: 'December 2017' }, { date: 'November 
2016' }, { date: 'August 2015' }, { date: 'June 2018' }, { date: 'May 2017' }];

dates.sort((a, b) => {
  const dateA = new Date(a.date.replace(' ', ', '));
  const dateB = new Date(b.date.replace(' ', ', '));
  return dateB - dateA;
});

如果您打算经常对大量数据进行排序,我建议您将数组转换为使用数字来表示日期。然后,您可以将它们格式化为

东方辉
2023-03-14

在获得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; }
 类似资料:
  • 假设我有一个由几个对象组成的数组: 我如何按日期元素对这个数组进行排序,从最接近当前日期的日期开始,然后按时间向下排序?请记住,数组可能有许多对象,但为了简单起见,我使用了2。 我会使用排序函数和自定义比较器吗?

  • 举个例子 那么,如何按日期对该数组进行排序? 这只是一个小例子,但它就像数组中的1000个对象。我在互联网上搜索并找到了一些使用函数的示例,但它在我的大数组中不起作用。

  • 可能重复: Java两个字段排序问题 我有用户对象,比如 我有一个,其中包含这些对象,我必须按名字对其进行排序,如果名字匹配,则只按姓氏排序。

  • 我需要一个可配置的格式作为输出。 我将永远只获得从“01”到“31”的日期字符串 我将永远只获得从“1000”到“9999”的年份字符串 我将永远只获得从“01”到“12”的月份字符串(永远不获得一月、二月等) 我知道SimpleDateFormat(format)可以在一定程度上起作用。 类似于:

  • 问题内容: 我需要通过对象属性之一的一个属性比较对象数组。 我在做 : 它没有编译,有人知道怎么做吗? 谢谢。 问题答案: 这是代码中导致错误的部分 您可以创建对特定类型的任意对象的(静态或非静态)方法的引用。对任何类型的对象的方法的引用如下所示: 但是方法引用不是对象,并且没有成员可以访问。使用此代码,您尝试访问引用的成员变量(并且不能) 另外,方法引用不是类,因此您不能从它们中获取另一个方法引

  • 当我使用以下代码时,Object错误。 谁能告诉我如何从年、月和日的值中获取Date对象?