首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >基于javascript中字符串中间的文本对数组进行排序

基于javascript中字符串中间的文本对数组进行排序
EN

Stack Overflow用户
提问于 2018-06-08 03:32:50
回答 1查看 127关注 0票数 -2

如果我有一个类似如下的数组:

代码语言:javascript
复制
var array=['Professional Centers-Beijing, China Monday, July 2, 2018 9 AM',
           'Professional Centers-Beijing, China Monday, July 2, 2018 3 PM',
           'Professional Centers-Beijing, China Wednesday, July 4, 2018 9 AM',
           'Professional Centers-Beijing, China Wednesday, July 4, 2018 3 PM',
           'The London Centre Monday, July 2, 2018 9 AM',
           'The London Centre Monday, July 2, 2018 3 PM',
           'The London Centre Tuesday, July 3, 2018 8 AM',
           'The London Centre Tuesday, July 3, 2018 2 PM',
           'The London Centre Wednesday, July 4, 2018 9 AM',
           'Professional Centers-NY Monday, July 2, 2018 9 AM',
           'Professional Centers-NY Friday, July 6, 2018 8 AM',
           'Professional Centers-NY Monday, July 2, 2018 3 PM',
           'Professional Centers-NY Saturday, July 7, 2018 10 AM',
           'Professional Centers-NY Monday, July 9, 2018 9 AM',
           'CTU Training Solutions Cape Town Wednesday, July 4, 2018 8 AM',
           'CTU Training Solutions Cape Town Wednesday, July 4, 2018 2 PM',
           'CTU Training Solutions Cape Town Thursday, July 5, 2018 8 AM',
           'CTU Training Solutions Cape Town Thursday, July 5, 2018 2 PM',
           'CTU Training Solutions Cape Town Friday, July 6, 2018 8 AM'];

是否可以根据数组索引处字符串中间的日期对数组进行排序,以使结果数组为:

代码语言:javascript
复制
['Professional Centers-Beijing, China Monday, July 2, 2018 9 AM',
 'Professional Centers-Beijing, China Monday, July 2, 2018 3 PM',
 'The London Centre Monday, July 2, 2018 9 AM',
 'The London Centre Monday, July 2, 2018 3 PM',
 'Professional Centers-NY Monday, July 2, 2018 9 AM',
 'Professional Centers-NY Monday, July 2, 2018 3 PM',
 'The London Centre Tuesday, July 3, 2018 8 AM',
 'The London Centre Tuesday, July 3, 2018 2 PM',
 'Professional Centers-Beijing, China Wednesday, July 4, 2018 9 AM',
 'Professional Centers-Beijing, China Wednesday, July 4, 2018 3 PM',
 'The London Centre Wednesday, July 4, 2018 9 AM',
 'CTU Training Solutions Cape Town Wednesday, July 4, 2018 8 AM',
 'CTU Training Solutions Cape Town Wednesday, July 4, 2018 2 PM',
 'CTU Training Solutions Cape Town Thursday, July 5, 2018 8 AM',
 'CTU Training Solutions Cape Town Thursday, July 5, 2018 2 PM',
 'Professional Centers-NY Friday, July 6, 2018 8 AM',
 'CTU Training Solutions Cape Town Friday, July 6, 2018 8 AM',
 'Professional Centers-NY Saturday, July 7, 2018 10 AM',
 'Professional Centers-NY Monday, July 9, 2018 9 AM'];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 03:39:45

你必须提取带有日期的部分来比较它的值,这可以通过向Array.sort传递一个自定义函数来实现-但要知道日期的转换高度依赖于浏览器-你可能想要使用momentjs进行健壮的日期转换。对我来说,这个脚本在Chrome上运行得很好,但在其他浏览器上可能就不行了。

代码语言:javascript
复制
var array = ['Professional Centers-Beijing, China Monday, July 2, 2018 9 AM',
             'Professional Centers-Beijing, China Monday, July 2, 2018 3 PM',
             'Professional Centers-Beijing, China Wednesday, July 4, 2018 9 AM',
             'Professional Centers-Beijing, China Wednesday, July 4, 2018 3 PM',
             'The London Centre Monday, July 2, 2018 9 AM',
             'The London Centre Monday, July 2, 2018 3 PM',
             'The London Centre Tuesday, July 3, 2018 8 AM',
             'The London Centre Tuesday, July 3, 2018 2 PM',
             'The London Centre Wednesday, July 4, 2018 9 AM',
             'Professional Centers-NY Monday, July 2, 2018 9 AM',
             'Professional Centers-NY Friday, July 6, 2018 8 AM',
             'Professional Centers-NY Monday, July 2, 2018 3 PM',
             'Professional Centers-NY Saturday, July 7, 2018 10 AM',
             'Professional Centers-NY Monday, July 9, 2018 9 AM',
             'CTU Training Solutions Cape Town Wednesday, July 4, 2018 8 AM',
             'CTU Training Solutions Cape Town Wednesday, July 4, 2018 2 PM',
             'CTU Training Solutions Cape Town Thursday, July 5, 2018 8 AM',
             'CTU Training Solutions Cape Town Thursday, July 5, 2018 2 PM',
             'CTU Training Solutions Cape Town Friday, July 6, 2018 8 AM'];
 
function dateParser(d) {
  // This splits the string at each , and joins the last two parts
  let dateString = d.split(', ').slice(-2).join(', ').trim();
  // Without moment.js this could not be easily parsed so you need it
  return moment(dateString, 'MMMM D, YYYY H A');
}

array.sort(function(a, b) {
  return dateParser(a) - dateParser(b)
});
 
console.log(array);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50748933

复制
相关文章

相似问题

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