javascript一直跳过两个循环中的if语句
javascript keeps skipping my if statement thats inside two loops
好的,所以我说的是用户的一些取消剪切,它必须是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
相关文章:
- 基于两个条件退出While循环
- 将循环中的两个文本框相乘,并在第三个文本框上显示结果
- 一个ajax循环有两个输出错误innerHTML
- 从两个基于0的for循环迭代器中获取单个基于0的索引的公式
- 两个循环JS函数相互冲突
- 识别两个文本中的单词(if 语句在 for 循环中)
- 如何在 JavaScript 中减少两个循环以提高效率
- 无法从 .each 循环加载谷歌地图上的两个标记
- 如何完成此循环?连接前面的两个字符
- 同时换掉两个Div,换成另一个Div并保持循环一段固定的秒数
- 两个不同的循环-都是don'不起作用
- 两个代码之间的区别是什么(javascript的循环)
- 一次两个对象的 JQuery 淡入淡出循环
- 是否可以让 DUST 模板循环和交错来自两个不同数组的元素
- 在 javascript 函数 javascript 动画中使用两个 for 循环
- 两个循环性能差异.交换内环和外环
- 具有两个条件的 while 循环仅检查一个
- 虽然循环多个条件不会同时检查这两个条件
- 同时循环两个jQuery对象
- 需要循环两个循环,并在内部循环中使用延迟迭代