js 比較版本號(一)


       最近群了有人問如何比較版本號,我好奇的試了一下。

       比較版本號,怎么辦?懶人的方法是借鑒,先查網上的資料,看看有木有直接的幫過來的。而且直接便捷的好像在茫茫"文海"中,而且發現大多數是Java的,於是這里自己試了下用js 來比較,並試圖找到簡潔的比較方法。

       比較版本號就是對字符串進行比較,這里結合正則表達式處理版本號。

      首先,來比較常見的版本號 如 "2.2.3","2.3.0":

     js版本號比較--之版本1.0(ps:由於后面進行改進,因此對每次比較加個"版本號" )

//假定字符串的每節數都在5位以下

function toNum(a){ var a=a.toString(); //也可以這樣寫 var c=a.split(/\./); var c=a.split('.'); var num_place=["","0","00","000","0000"],r=num_place.reverse(); for (var i=0;i<c.length;i++){ var len=c[i].length; c[i]=r[len]+c[i]; } var res= c.join(''); return res; } function cpr_version(a,b){ var _a=toNum(a),_b=toNum(b); if(_a==_b) console.log("版本號相同!版本號為:"+a); if(_a>_b) console.log("版本號"+a+"是新版本!"); if(_a<_b) console.log("版本號"+b+"是新版本!"); } var a="2.2.3";b="2.3.0"; cpr_version(a,b);

   在chrome 控制台中執行結果:

   

   多來幾組:

  

     有的版本號可能帶有字母,如何比較呢?如  "v2.2.3","v2.3.0",   不用着急,用正則表達式,改動一點點即可:

   js版本號比較--之版本1.1   

//假定字符串的每節數都在5位以下
function toNum(a){ var a=a.toString(); //這里變了 var c=a.split(/\D/); var num_place=["","0","00","000","0000"],r=num_place.reverse(); for (var i=0;i<c.length;i++){ var len=c[i].length; c[i]=r[len]+c[i]; } var res= c.join(''); return res; } function cpr_version(a,b){ var _a=toNum(a),_b=toNum(b); if(_a==_b) console.log("版本號相同!版本號為:"+a); if(_a>_b) console.log("版本號"+a+"是新版本!"); if(_a<_b) console.log("版本號"+b+"是新版本!"); } var a="v2.2.3";b="v2.3.0"; cpr_version(a,b); var a="v2.21";b="v2.3.10"; cpr_version(a,b); var a="v3.1.25";b="v3.1.25"; cpr_version(a,b);

    

   執行結果:

  

   到這里,js比較版本號基本結束。在網上看到居然有類似這種"2.3.0a","2.3.0b"版本號,顯然后一種版本新一些。如果有,該如何比較呢?

  思路不變,上面已經處里好了數字的,接下來只需比較字母的順序:

  js版本號比較之--版本1.2

 
        
//假定字符串的每節數都在5位以下
//去除數組空值||空格值
if (!Array.prototype.trim){
    Array.prototype.trim=function(){
       var  arr=[];
       this.forEach(function(e){
       if(e.match(/\S+/))  arr.push(e);
       })
       return arr;
        }
    }

//提取數字部分
function toNum(a){
 var a=a.toString();
var c=a.split(/\D/).trim();
  var num_place=["","0","00","000","0000"],r=num_place.reverse();
  for (var i=0;i<c.length;i++){
    var len=c[i].length;
             c[i]=r[len]+c[i];
   }
 var res= c.join('');
 return res;
 } 

//提取字符
function toChar(a){
  var a=a.toString();
  var c=a.split(/\.|\d/).join('');
  return c;
}

function cpr_version(a,b){

 var _a1=toNum(a),_a2= toChar(a),
     _b1=toNum(b),_b2= toChar(b);
 if(_a1>_b1)  console.log("版本號"+a+"是新版本!");  
 if(_a1<_b1)  console.log("版本號"+b+"是新版本!"); 
 if(_a1===_b1)  {
      _a2=_a2.charCodeAt(0).toString(16);
      _b2=_b2.charCodeAt(0).toString(16);
      if (_a2>_b2)  console.log("版本號"+a+"是新版本!");   
      if(_a2<_b2)   console.log("版本號"+b+"是新版本!"); 
      if(_a2===_b2)   console.log("版本號相同!版本號為:"+a);
 }
}

var a="2.3.0a",b="2.3.0b";

cpr_version(a,b);
var a="2.3.0c",b="2.3.0c";

cpr_version(a,b);
  在chrome 控制台中執行結果:

  

    至此,帶字符升級模式的版本號也比較完了。當然,上面的腳本只能比較帶一個字母字符的,帶多個字母字符的"版本號"不常見,在此略去。上面也只是比較

了一對,如果有多組版本號,改如何處理呢?請看筆者文章:js比較版本號(二)

   

 

 

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM