【发布时间】:2021-01-23 12:12:23
【问题描述】:
我想在将项目推送到数组时对日期和时间进行排序。到目前为止,我只能对日期进行排序,但不能对时间进行排序。如果同一个日期有两次,那么我如何先排序日期,然后是该日期的时间。
let items = [
{'id': 'id7', 'date': '2020-08-17', 'time': '05:02:54.000'},
{'id': 'id2', 'date': '2020-05-12', 'time': '02:09:57.000'},
{'id': 'id3', 'date': '2020-05-12', 'time': '03:04:44.000'}, //both the 2020-05-12 date has two timings so I want to sort these time too along with the date
{'id': 'id4', 'date': '2020-09-23', 'time': '07:16:23.000'}
];
const headers = [
'ID',
'Date',
'Time'
];
dataArr = []
items.forEach(item => {
dataArr.push([
item.id,
item.date,
item.time
]);
})
;
let sortedData = [headers, ...dataArr.sort((a, b) => a[1].localeCompare(b[1]))];
最终排序的数组必须看起来像
['id': 'id2', 'date': '2020-05-12', 'time': '02:09:57.000'],
['id': 'id3', 'date': '2020-05-12', 'time': '03:04:44.000'],
['id': 'id7', 'date': '2020-08-17', 'time': '05:02:54.000'],
['id': 'id4', 'date': '2020-09-23', 'time': '07:16:23.000']
【问题讨论】:
-
a[1]没有意义;您的数组包含对象。 -
我推入dataArr数组,然后比较@Pointy
-
对,但是传递给排序比较器的
a和b将引用您推入数组的对象。您需要将a.date与b.date和a.time与b.time进行比较。 -
用
date + time制作时间戳,然后比较 -
@Pointy 它对我有用。
标签: javascript arrays string date sorting