Javascript函数比较两个版本

Vit*_*.us 4 javascript algorithm version-control

我正在编写一个函数来比较2个版本,如果第二个版本比第一个版本大,则返回true.

但我的算法有一个"洞",我无法弄清楚如何修复.

function compareversion(version1,version2){

    var result=false;

    if(typeof version1!=='object'){ version1=version1.toString().split('.'); }
    if(typeof version2!=='object'){ version2=version2.toString().split('.'); }

    for(var i=0;i<(Math.max(version1.length,version2.length));i++){

        if(version1[i]==undefined){ version1[i]=0; }
        if(version2[i]==undefined){ version2[i]=0; }

        if(version1[i]<version2[i]){
            result=true;
            break;
        }
    }
    return(result);
}
Run Code Online (Sandbox Code Playgroud)

这个例子按预期返回

compareversion('1','1') //false
compareversion('1','1.0.0') //false
compareversion('2.0','1.0.0') //false
compareversion('1.1','1.2') //true
compareversion('1','1.0.0.1') //true
Run Code Online (Sandbox Code Playgroud)

但是这个

compareversion('1.1.0','1.0.1') //return true but should be false
Run Code Online (Sandbox Code Playgroud)

Den*_*nis 7

这应该工作:

function compareversion(version1,version2){

    var result=false;

    if(typeof version1!=='object'){ version1=version1.toString().split('.'); }
    if(typeof version2!=='object'){ version2=version2.toString().split('.'); }

    for(var i=0;i<(Math.max(version1.length,version2.length));i++){

        if(version1[i]==undefined){ version1[i]=0; }
        if(version2[i]==undefined){ version2[i]=0; }

        if(Number(version1[i])<Number(version2[i])){
            result=true;
            break;
        }
        if(version1[i]!=version2[i]){
            break;
        }
    }
    return(result);
}
Run Code Online (Sandbox Code Playgroud)

之所以compareversion('1.1.0','1.0.1')失败是你的代码首先比较11,然后10(不打破这里,因为它打破了只有当version1[i] < version2[i]),然后01.

因为0 < 1,它返回false.