【问题标题】:how to sort 3 sorted arrays based on timestamps in javascript如何根据javascript中的时间戳对3个排序数组进行排序
【发布时间】:2020-12-09 04:54:34
【问题描述】:
给定 3 个排序的对象数组,其中每个对象都有一个 timestamp 键,我如何将它们合并到 Javascript 中的单个排序数组中,最终数组根据时间戳进行排序?
// merge these messages, flights and hotels arrays into one array and sort them
// messages, flights and hotels are already sorted
const messages = [{"timestamp": "2019-06-28", "message": "messageVal"}, {"timestamp": "2019-06-29", "message": "messageVal"}];
const flights = [{"timestamp": "2019-08-19", "flight": "flightVal"}, {"timestamp": "2019-08-28", "flight": "flightVal"}];
const hotels = [{"timestamp": "2019-11-20", "hotel": "hotelVal"}];
【问题讨论】:
标签:
javascript
arrays
algorithm
sorting
date
【解决方案1】:
您可以将所有这些组合在一个数组中,将其展平并排序
const messages = [
{ timestamp: "2019-06-28", message: "messageVal" },
{ timestamp: "2019-06-29", message: "messageVal" },
]
const flights = [
{ timestamp: "2019-08-19", flight: "flightVal" },
{ timestamp: "2019-08-28", flight: "flightVal" },
]
const hotels = [{ timestamp: "2019-11-20", hotel: "hotelVal" }]
const res = [messages, flights, hotels]
.flat()
.sort((a, b) => b.timestamp - a.timestamp)
console.log(res)
【解决方案2】:
您可以将时间戳属性转换为日期,使用 flat() 合并数组,然后排序。
我做了一个可以帮助你的简单函数,它允许升序和降序。
let array1 = [{"timestamp": "2019-06-30", "message": "1"}, {"timestamp": "2019-06-29", "message": "2"}];
let array2 = [{"timestamp": "2019-06-27", "message": "3"}, {"timestamp": "2019-06-26", "message": "4"}];
function sortArray(input, isDescending = false){
return input.flat().sort((x1, x2) => isDescending ? new Date(x2.timestamp) - new Date(x1.timestamp) : new Date(x1.timestamp) - new Date(x2.timestamp));
}
console.log(sortArray([array1, array2])); //Ascending
console.log(sortArray([array1, array2], true)); //Descending