javascript一直跳过两个循环中的if语句

javascript keeps skipping my if statement thats inside two loops

本文关键字:循环 两个 语句 if 一直 javascript      更新时间:2023-09-26

好的,所以我说的是用户的一些取消剪切,它必须是4个数字,并且数字不能相同。所以一切都在起作用,接受我检查4个数字的部分。我将字符串放入一个数组中,然后通过将第一个与第二个、第三个、第四个、,然后我将第二个与第三个和第四个进行核对然后我把第三个号码和第四个核对一下

我的问题是,无论我尝试什么,if语句都不会起作用,每次都会被绕过。我在代码中添加随机返回,看看它去了哪里,不管怎样,它总是返回12,即使我输入的数字是1111,它仍然通过。

我花了几个小时尝试不同的东西,请帮帮我!!

function validate(guess){
var user_guess = guess;
var valid = true;
var counter = 0;
parseFloat(user_guess);
if(user_guess.length == 4){
    if((user_guess == null) || (isNaN(user_guess))){
        validation_alert();
    }else{
        var guess_string = toString(user_guess);
        var guess_array = guess_string.split('');
        var guess_array2 = guess_array;
        for(var i = 0; i < 3; i++){
            counter = i + 1;
            for(c = counter; c < 4; c++){
                if(guess_array[i] == guess_array2[c]){
                    return 11;
                    valid = false;
                    validation_alert();
                }
            }
        }
        if(valid == true){
        return 12;
        }else{
            return 13;
            validation_alert();
        }
    }//if null

}else{
    validation_alert();
}//if 4 end tag

}// function close

只是为了向您证明JavaScript使用函数范围而不是块范围(if else for ...),这意味着您声明的每个var都会自动移动到它运行的当前函数的顶部。

还要注意,当您return某个东西时,您将退出当前函数,之后不执行任何操作。

如果你检查length,你可以确定它将是一个数字,所以使用===,它也检查它的类型(数字、字符串、布尔)。

我认为你的前两次if陈述应该颠倒过来。在任何情况下,user_guess == null将永远不会验证,因为先前的if检查length === 4

通常,当您使用return时,每个块作用域都应该返回一些内容。我还没有编辑过这个,但这在严格的javascript中是意料之中的事。

valid=false开始似乎更合乎逻辑,只有当您确信它是真的时,您才会将其设置为真。我把这件事留给你。

function validate(guess){
    var user_guess = parseFloat(guess),
        guess_string,
        guess_array,
        guess_array2,
        valid = true,
        counter = 0,
        i = 0,
        c;
    if (!user_guess || isNaN(user_guess)){
        validation_alert();
    } else {
        if (guess.length === 4){
            guess_string = user_guess.toString();
            guess_array = guess_string.split('');
            guess_array2 = guess_array;
            for (i; i < 3; i++){
                counter = i + 1;
                c = counter;
                for (c; c < 4; c++){
                    if (guess_array[i] == guess_array2[c]){
                        valid = false;
                        validation_alert();
                        return 11;
                    }
                }
            }
            if (valid){
                return 12;
            } else {
                validation_alert();
                return 13;
            }
        } else {
            validation_alert();
        }
    }
}

如果你只需要检查字符串是否有4个唯一的数字,那么这样做会容易得多:

function isValid(str){
    var unique={};
    for(var i=0;i<str.length;i++){//for each character in the string
        unique[str[i]]=true;//we add the character as a key in unique object(the =true doesnt really matter)
    }
    var chars=Object.keys(unique);//we get an array with the keys in the object(we get an array with the unique characters)
    if(chars.length != 4) return false; //if the unique chracters are different than 4, its not valid so return false
    chars.sort();//we order the array in lexicographical order
    if(chars[0]>= '0' && chars[0] <='9' && chars[3]>= '0' && chars[3] <='9') return true;//if the first character and the last ones are digits, then the ones in the middle wil be digits as well because of the sort we made. If they are, return true
    return false;//if they are not both digits, return false
}
console.log(isValid('1111'))//false
console.log(isValid('9230'))//true
console.log(isValid('1343'))//false
console.log(isValid('a412'))//false
console.log(isValid(''))//false