简体   繁体   English

JavaScript包含年份的字符串排序数组使用

[英]Javascript sort array of strings containing year using

I'm trying to sort an array of seasons by season and year, while removing duplicate seasons. 我正在尝试按季节和年份对一系列季节进行排序,同时删除重复的季节。 The sort is not enough I guess I need to go by a regex but could not accomplish it 排序还不够,我想我需要使用正则表达式,但无法完成

 const myStringArray = ["Winter 17", "Summer 13", "Winter 15", "Summer 12", "Winter 17", "Summer 12", "Summer 17"] console.log(_.uniq(myStringArray).sort(function(a, b) { return b - a; })); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 

You can try like this: 您可以这样尝试:

 const myStringArray = ["Winter 17", "Summer 13", "Winter 15", "Summer 12", "Winter 17", "Summer 12", "Summer 17"] console.log(_.uniq(myStringArray).sort(function(a, b) { return b.split(' ')[1] - a.split(' ')[1] || a.localeCompare(b); })); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 

You can sort by the year, then take the index of an created array that sets the order of season. 您可以按年份排序,然后获取设置季节顺序的已创建数组的索引。 To make the array unique, simply use a new Set 要使数组唯一,只需使用一个新的Set

 const myStringArray = [...new Set(["Winter 17", "Summer 13", "Winter 15", "Summer 12", "Winter 17", "Summer 12", "Summer 17"])]; const order = ['Winter', 'Summer', 'Fall', 'Spring']; myStringArray.sort((a, b) => { let s = b.split(/\\s/); let s1 = a.split(/\\s/); return Number(s1[1]) - Number(s[1]) || order.indexOf(s[0]) * -1; }); console.log(myStringArray); 

If you are sure you your strings will always be in the format <Season YY> and digits will only appear once, you can use a quick and simple regex to sort desc: 如果您确定您的字符串将始终采用<Season YY>格式,并且数字仅出现一次,则可以使用快速简单的正则表达式对desc进行排序:

 const myStringArray = ["Winter 17", "Summer 13", "Winter 15", "Summer 12", "Winter 17", "Summer 12", "Summer 17"] console.log(_.uniq(myStringArray).sort(function(a, b) { return +b.match(/\\d+/)[0] - +a.match(/\\d+/)[0]; })); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM