Skip to content

版本比较函数 ​

本节目标:理解“版本比较函数”的核心思路,并能把它用于实际开发或面试表达。

/*
*

版本号比较方法 * 传入两个字符串,当前版本号:curV;比较版本号:

reqV
*

调用方法举例:compare("1.1","1.2"),将返回

false
*/
function compare(curV,reqV){
if(curV && reqV){
//

将两个版本号拆成数字

var arr1 = curV.split('.'),
arr2 = reqV.split('.');
var minLength=Math.min(arr1.length,arr2.length),
position=0,
diff=0;
//

依次比较版本号每一位大小,当对比得出结果后跳出循环(后文有简单介绍)

while(position<minLength && ((diff=parseInt(arr1[position])-parseInt(arr2[position]))==0)){
position++;
}
diff=(diff!=0)?diff:(arr1.length-arr2.length);
//

若curV大于reqV,则返回

true
return diff>0;
}else{
//

输入为空

console.log("

版本号不能为空

");
return false;
}
}

//中间的while循环等价于:

while(position<minLength){
diff=parseInt(arr1[position])-parseInt(arr2[position]);
if(diff!=0){
break;
}
position++;
}

最后分享一个小技巧:懂js的人基本能看懂java的代码,所以有些经典的问题可以直接百度

“java

如何实现...”,而不要总是百度

“js

如何实现...”,相关问题在js社区搜不到的,往往在java社区能找到详细的解答。

function compareV(currentV, queryV) {
let arrCurrentV = currentV.split('.'),
arrQueryV = queryV.split('.'),
minLength = Math.min(arrCurrentV.length, arrQueryV.length),
position = 0,
diff;
//

循环比较,如果当前比较位置的值相等就继续比较下一位置 //但如果有一个版本号比较短,就比较到较短版本的版本位置就行了

while ((position < minLength) && ((diff = parseInt(arrCurrentV[position]) - parseInt(arrQueryV[position])) === 0)) {
position++;
}
//

如果当前比较位置的值已经不相等了,只要比较当前位置的值就行了 //如果当前比较位置的值相等,则比较两个数组的长度,

diff = (diff !== 0) ? diff : (arrCurrentV.length - arrQueryV.length);
if (diff > 0) {
return 1;
} else if (diff = 0) {
return 0;
} else {
return -1;
}
}

本站总访问 — 次