结合机考题for和forEach在使用return上的差别

341 阅读1分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

前言

在做一道逻辑题时,在forEach中使用return不能跳出整个循环,只能跳出当前循环,使用break则会报错。 但是在for循环中使用return能跳出整个循环。

题目如下:实现一个方法用于比较两个版本号,满足以下要求

image.png image.png

代码实现

    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')