【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 2012-07-15
        • 2018-11-01
        • 2018-08-09
        • 1970-01-01
        • 2013-03-06
        • 1970-01-01
        • 2020-04-15
        • 2020-01-01
        • 2016-09-01
        相关资源
        最近更新 更多