Appearance
版本比较函数
本节目标:理解“版本比较函数”的核心思路,并能把它用于实际开发或面试表达。
/*
*版本号比较方法 * 传入两个字符串,当前版本号: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;
}
}