角度:按字母顺序对软件版本进行排序

时间:2019-01-03 13:42:55

标签: sorting version alphabetical-sort

我需要按字母顺序排列从最新到最旧的Angular软件版本列表(即1.10.3.e,1.9.5.b,1.7.3、1.5.1.c)。我一直在使用.sort(),它按字母顺序排序,但将值视为字符串,导致任何1.10版本在1.5版本之后进行排序,因为它分别查看1和0.我试图做.sort(((a,b )=> b-a),它将列表完全随机化,而不是对其进行排序。我也尝试过使用.slice('。'),它似乎不起作用。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这不是一个容易回答的问题,因为要考虑一些变量。 假设您将永远不会拥有1.1、1.a之类的版本,那么以下方法就可以解决问题。

Settings.System class

答案 1 :(得分:1)

解决方案 1):带有“ 0”的临时键盘:

(如果版本号的一部分可能超过2位数字,则padStart可以更改为3、4,...)

var vers = [ '1.10.3.e', '1.9.5.b', '1.7.3', '1.5.1.c' ];
console.log( vers );

var temp = vers.map( function( s ){
    return s.split('.').map( function( n ){ return n.padStart(2,'0'); } ).join('.');
} )

temp.sort();

vers = temp.map( function( s ){
    return s.split('.').map( function( n ){ return n.replace(/^0+/, ''); } ).join('.');
} )

console.log( temp );
console.log( vers );

解决方案 2):按整数和字符串分别排序。
我认为这是更优雅的解决方案,即使它有些复杂。
(已经给出了这样的整数答案)