这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战
前言
在做一道逻辑题时,在forEach中使用return不能跳出整个循环,只能跳出当前循环,使用break则会报错。 但是在for循环中使用return能跳出整个循环。
题目如下:实现一个方法用于比较两个版本号,满足以下要求
代码实现
function compareVersion(version1,version2){
var arr1=version1.split('.')
var arr2=version2.split('.')
var length,flag
if(arr1.length>arr2.length){
length=arr2.length
}else{
length=arr1.length
}
for(var index = 0; index < length; index++){
if(Number(arr1[index])>Number(arr2[index])){
console.log(1)
return 1
}else if(Number(arr1[index])<Number(arr2[index])){
console.log(-1)
return -1
}else if(length-1===index&&arr1.length===arr2.length){
console.log(0)
return 0
}else if(length-1===index&&arr1.length>arr2.length&&Number(arr1[arr1.length-1])!==0){
console.log(1)
return 1
}else if(length-1===index&&arr1.length<arr2.length&&Number(arr1[arr1.length-1])!==0){
console.log(-1)
return -1
}else if(length-1===index){
console.log(0)
return 0
}
}
}
//测试
compareVersion('0.20.7','0.20.8')
compareVersion('0.20.9','0.20.8')
compareVersion('0.20.08','0.20.8')
compareVersion('0.21.08','0.20.8')
compareVersion('0.20.08','0.20.8.1')
compareVersion('0.20.8.0','0.20.8')
compareVersion('0.20.8.1','0.20.8')
compareVersion('0.020','0.20')
总结
这题主要是考察逻辑思维是否完整,但是也会遇到一些很基础但是容易被忽视的问题,记录下来加深印象。这道题最后的三个if判断只考虑了多一位数的情况,满足题目要求。实际情况还有多好几位的情况,可以使用多余的位数相加是否等于0作为判断。
因此完整版代码如下:
function compareVersion(version1,version2){
var arr1=version1.split('.')
var arr2=version2.split('.')
var length,flag=0
if(arr1.length>arr2.length){
length=arr2.length
for(var i = length-1; i <arr1.length; i++){
flag+=i
}
}else{
length=arr1.length
for(var i = length-1; i <arr2.length; i++){
flag+=i
}
}
for(var index = 0; index < length; index++){
if(Number(arr1[index])>Number(arr2[index])){
console.log(1)
return 1
}else if(Number(arr1[index])<Number(arr2[index])){
console.log(-1)
return -1
}else if(length-1===index&&arr1.length===arr2.length){
console.log(0)
return 0
}else if(length-1===index&&arr1.length>arr2.length&&flag!==0){
console.log(1)
return 1
}else if(length-1===index&&arr1.length<arr2.length&&flag!==0){
console.log(-1)
return -1
}else if(length-1===index){
console.log(0)
return 0
}
}
}
compareVersion('0.20.7','0.20.8')
compareVersion('0.20.9','0.20.8')
compareVersion('0.20.08','0.20.8')
compareVersion('0.21.08','0.20.8')
compareVersion('0.20.08','0.20.8.1')
compareVersion('0.20.8.0','0.20.8')
compareVersion('0.20.8.1','0.20.8')
compareVersion('0.020','0.20')
compareVersion('0.020.1.0','0.20')