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)
这应该工作:
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')失败是你的代码首先比较1到1,然后1到0(不打破这里,因为它打破了只有当version1[i] < version2[i]),然后0到1.
因为0 < 1,它返回false.
| 归档时间: |
|
| 查看次数: |
1790 次 |
| 最近记录: |