簡體   English   中英

從單個日期數組創建日期范圍

[英]Create ranges of dates from a single array of dates

如何從一組日期中確定日期范圍(從最新到最舊)?

我有這個日期數組:

["2017-11-16T12:12:50.323Z", "2017-11-15T16:13:24.219Z", "2017-11-14T16:13:55.449Z", "2017-11-13T06:56:21.332Z"]

我希望得到以下日期范圍的結果:

["2017-11-16T12:12:50.323Z", "2017-11-15T16:13:24.219Z"]
["2017-11-15T16:13:24.219Z", "2017-11-14T16:13:55.449Z"]
["2017-11-14T16:13:55.449Z", "2017-11-13T06:56:21.332Z"]

我想用JavaScript實現

假設日期是有序的,則可以使用for循環迭代到最后一個項目,並使用Array#slice每一對:

 var dates = ["2017-11-16T12:12:50.323Z", "2017-11-15T16:13:24.219Z", "2017-11-14T16:13:55.449Z", "2017-11-13T06:56:21.332Z"]; var ranges = []; for(var i = 0; i < dates.length - 1; i++) { ranges.push(dates.slice(i, i + 2)); } console.log(ranges); 

您可以使用Array#reduce模式將數組的實際元素和下一個元素用於結果的新項目,該模式將下一個循環的下一個項目作為實際項目返回。

 var data = ["2017-11-16T12:12:50.323Z", "2017-11-15T16:13:24.219Z", "2017-11-14T16:13:55.449Z", "2017-11-13T06:56:21.332Z"], result = []; data.sort((a, b) => b > a || -(b < a)); // desc data.reduce((a, b) => (result.push([a, b]), b)); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

 var data = ["2017-11-16T12:12:50.323Z", "2017-11-15T16:13:24.219Z", "2017-11-14T16:13:55.449Z", "2017-11-13T06:56:21.332Z"]; var paired = data.sort().slice(0, -1).map(function(d, i) { return [d, data[i+1]]; }) console.log(paired); 

或者使用es6,您可以在一行中完成:

 let data = ["2017-11-16T12:12:50.323Z", "2017-11-15T16:13:24.219Z", "2017-11-14T16:13:55.449Z", "2017-11-13T06:56:21.332Z"]; let paired = data.sort().slice(0, -1).map((d, i) => [d, data[i+1]]) console.log(paired) 

由於不需要任何高級排序,因此您可以使用javascript提供的默認.sort()函數。

var datesSorted = dates.sort();

成對拆分可以一個周期完成,因為JavaScript不提供任何直接的“成對拆分數組”功能。

最終腳本應如下所示:

var dates = ["2017-11-16T12:12:50.323Z", "2017-11-15T16:13:24.219Z", "2017-11-14T16:13:55.449Z", "2017-11-13T06:56:21.332Z"];
var datesSorted = dates.sort();

var datePairs = function(datesSorted) {
    var pairs = [];
    for (var i=0 ; i<datesSorted.length ; i+=2) { //iterate by two
        if (datesSorted[i+1] !== undefined) { //check if a date has a "pair"
            pairs.push ([datesSorted[i], datesSorted[i+1]]); //if it does, push them both
        } else {
            pairs.push ([datesSorted[i]]);
        }
    }
    return pairs;
};

您現在要將日期數組數組存儲在datePairs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM