zoukankan      html  css  js  c++  java
  • 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比较版本号(二)

       

        

  • 相关阅读:
    浙江工业大学校赛 小马哥和数列
    浙江工业大学校赛 XiaoWei的战斗力
    浙江工业大学校赛 猜猜谁是我
    浙江工业大学校赛 竹之书(大数,同余定理)
    浙江工业大学校赛 画图游戏 BugZhu抽抽抽!!
    浙江工业大学校赛 画图游戏
    pta 天梯地图 (Dijkstra)
    Atom打造 c/c++编译环境(忙了一个上午)
    HRBUST
    CSU 1808 地铁 (Dijkstra)
  • 原文地址:https://www.cnblogs.com/zengnificant/p/5634389.html
Copyright © 2011-2022 走看看