2017-05-18 59 views
-1
list = ["Conversation With Bob May 10, 2017 13:05", 
     "Conversation With Bob May 10, 2017 9:22", 
     "Conversation With Alice May 12, 2017 4:12", 
     "Conversation With Alice May 8, 2017 3:59", 
     "Conversation With Kevin December 12, 2017 7:55", 
     "Conversation With Tom January 5, 2017 16:00", 
     "Conversation With Alice, Bob, Kevin February 5, 2017 21:00", 
     "Conversation With Alice, Kevin March 12, 2017 9:45"] 

我想通过“交谈与爱丽丝”第一部分按字母顺序排序此列表,然后按日期/时间。最简单的方法来排序在Javascript中的字符串列表?

我知道我必须做的线沿线的东西:

list.sort(
    function(a,b) { 
     //DO SOMETHING 
    } 
) 

但我无法得到这种正确的。

编辑:对不起,我在JavaScript的意思。

+5

您应该使用字符串元组,而不是一个字符串。你可能最终会从字符串中创建这样一个元组。 –

+1

另外,将日期转换为DateTime对象;那些排序很好。 – Prune

+0

好吧,然后有更多的工作,我建议从字符串提取时间到一些日期时间对象,并按2个字段排序。 –

回答

1

对于日期字符串Date对象的转换我建议你发现不适合您,为什么要重新发明轮子库 - 在下面,我使用momentjs

var list = [ 
 
    "Conversation With Bob May 10, 2017 13:05", 
 
    "Conversation With Bob May 10, 2017 9:22", 
 
    "Conversation With Alice May 12, 2017 4:12", 
 
    "Conversation With Alice May 8, 2017 3:59", 
 
    "Conversation With Kevin December 12, 2017 7:55", 
 
    "Conversation With Tom January 5, 2017 16:00", 
 
    "Conversation With Alice, Bob, Kevin February 5, 2017 21:00", 
 
    "Conversation With Alice, Kevin March 12, 2017 9:45" 
 
]; 
 

 
var sorted = list.map(item => { 
 
    let s = item.split(' '), 
 
     d = s.splice(-4), 
 
     date = moment(d.join(' '), 'MMMM do, YYYY h:mm').toDate(), 
 
     text = s.join(' '); 
 

 
    return { item, text, date }; 
 
}) 
 
.sort((a, b) => a.text.localeCompare(b.text) || (a.date - b.date)) 
 
.map(item => item.item); 
 

 
console.log(sorted.join('\n'));
<script src="https://momentjs.com/downloads/moment.min.js"></script>

0

如果要对此列表进行排序按名称,你可以简单地找到第二个空间的索引,然后加1至该位置查找姓名的第一个字符。之后,您可以使用该字符的ASCII值对字符串进行排序。否则,如果要按日期排序,则需要查找日期并将其转换为日期对象。然后,您可以简单地控制日期的时间戳以对字符串进行排序。

+0

“char”没有ASCII值,因为它是一个UTF-16编码单元,其中一个或两个编码Unicode编码点。一种按代码单位按字典顺序排列。另一个将按码字按字母顺序排列。其他人会通过特定的文化。当用户需要按字母顺序排序时,他们可能会根据他们来自哪里,他们在哪里,或者他们公司的家庭办公室的语言和文化来思考。当然,所需要的东西并不清楚。 –

+0

@Tom Blodget谢谢你的解释,当然他没有很好地解释上下文 – PazzoTotale

相关问题