首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS:按日期和时间排序数组

JS:按日期和时间排序数组
EN

Stack Overflow用户
提问于 2017-02-10 21:27:52
回答 4查看 669关注 0票数 0
代码语言:javascript
复制
[09.02.2017 - 10:40:06][NOTICE] - Start looping through invoices from Teamleader..
[08.02.2017 - 10:24:26][NOTICE] - Start looping through invoices from Teamleader..
[08.02.2017 - 10:29:24][NOTICE] - Start looping through invoices from Teamleader..

以下是生成上述输出的代码:

代码语言:javascript
复制
var data = allText.split("\n");
for(var i = 0, len = data.length; i < len; i++){
   console.log(data[i]);
}

是否可以在给定的日期和时间对数组进行排序?

下面是一个示例,说明了它应该是什么样子:

代码语言:javascript
复制
[09.02.2017 - 10:40:06][NOTICE] - Start looping through invoices from Teamleader..
[08.02.2017 - 10:29:25][NOTICE] - Start looping through invoices from Teamleader..
[08.02.2017 - 10:24:26][NOTICE] - Start looping through invoices from Teamleader..
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-10 21:49:43

在撰写本文时,其他解决方案要么不完整,要么包含错误。特别是,accepted answer by rakwaht将日期排序为字符串,这会给出不正确的结果。

您可以使用正则表达式和Date构造函数从一行中提取和解析日期。从那里开始,只需对包含行的数组进行排序:

代码语言:javascript
复制
const data = `
[09.02.2017 - 10:40:06][NOTICE] - Start looping through invoices from Teamleader..
[08.02.2017 - 10:24:26][NOTICE] - Start looping through invoices from Teamleader..
[08.02.2017 - 10:29:24][NOTICE] - Start looping through invoices from Teamleader..`
  .trim().split('\n')

function dateFromLine(line) {
  const result = /^\[(.*?)\]/.exec(line)
  const date = result[1].replace("-", "")
  return new Date(date)
}

function compareLinesByDate(a, b) {
  return dateFromLine(b) - dateFromLine(a)
}

data.sort(compareLinesByDate)
console.log(data.join('\n'))

请注意,此代码假定每一行都以这种方式格式化。要使其更加健壮,还需要做更多的工作。

票数 3
EN

Stack Overflow用户

发布于 2017-02-10 21:39:42

您可以使用排序函数对数组进行排序,在该函数中,您可以指定应根据哪个基础对数组进行排序:

下面是一个符合您需求的示例:

代码语言:javascript
复制
var data = [
"[09.02.2017 - 10:40:06][NOTICE] - Start looping through invoices from Teamleader]",
"[08.02.2017 - 10:24:26][NOTICE] - Start looping through invoices from Teamleader]",
"[08.02.2017 - 10:29:24][NOTICE] - Start looping through invoices from Teamleader]"
];
data.sort(
    function(a, b){ 
         // a and b are two elements in the list that are supposed to be compared
         var a_date = a.substring(1, 22); //take only date from string
         var b_date = b.substring(1, 22); //take only date from string
         // We compare those strings to order it.
         if ( a_date < b_date )
            return 1;
         if ( a_date > b_date  )
            return -1;
         return 0;
    }
);
 console.log(data);

您可以在JS中找到一些对here函数的引用

票数 1
EN

Stack Overflow用户

发布于 2017-02-10 21:33:59

您可以在数组上使用函数sort()和一个比较函数来比较日期。我不知道你在试着比较什么,但这里有一个简单的例子。

代码语言:javascript
复制
[/*...*/].sort(function(a, b){
    //here a and b stand for your dates. you will need to adjuste your code to  make it works since we have very little information about it.
    return Date.compare(a, b);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42160544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档