首先,如果语句工作得很好,那么它会按照预期进入for循环,但是当然,它会决定执行两个if语句(它们彼此矛盾并且#34; =="和"!=")..我不明白:(
if($scope.firstinitial==$scope.firstinput&&$scope.secondinitial==$scope.secondinput){
$scope.initialmatches="MATCHES THE INITIALS";
for (var i=0; i<$scope.discountcodes.length; i++) {
console.log($scope.discountcodes[i]);
if($rootScope.discountcodeinput.attempt.toLowerCase()!=$scope.discountcodes[i]){
$scope.changeBack();//DOES ONLY IF INPUT DOES NOT MATCH DATA
}
if($rootScope.discountcodeinput.attempt.toLowerCase()==$scope.discountcodes[i]){
console.log($scope.discountcodes[i]);//DOES ONLY IF INPUT MATCHES DATA
$scope.changeBackAgain();
}
}
}
更新: 在进行错误测试之后,只有匹配后的最后一个折扣代码才能正常工作......这让我的思绪更加难以理解。因此,当用户键入与数组中最后一个折扣代码匹配的折扣代码时,只有第一个if语句触发而不是第二个。有什么想法吗?
答案 0 :(得分:1)
如果$scope.changeBack();
执行了修改discountcodes[i]
或$rootScope.discountcodeinput.attempt
的操作,则可以执行第二个if语句。你可能想做的是:
for (var i=0; i<$scope.discountcodes.length; i++) {
if($rootScope.discountcodeinput.attempt.toLowerCase()!=$scope.discountcodes[i]){
$scope.changeBack();//DOES ONLY IF INPUT DOES NOT MATCH DATA
}
else {
$scope.changeBackAgain();
}
}
答案 1 :(得分:1)
我认为$scope.changeBack();
中发生的任何事情都是第二个条件true
答案 2 :(得分:1)
由于内部的类型强制,显然使用==运算符会产生非常意外的结果,因此始终使用===
如果你不需要同时执行两个语句,那么也会在那里添加一个else语句。
除此之外,我会说某些事情正在改变,我会在调试窗口中逐步完成它,看看每个变量的当前结果是什么,或者将它们打印到控制台。
if($scope.firstinitial==$scope.firstinput&&$scope.secondinitial==$scope.secondinput){
$scope.initialmatches="MATCHES THE INITIALS";
for (var i=0; i<$scope.discountcodes.length; i++) {
console.log($scope.discountcodes[i]);
if($rootScope.discountcodeinput.attempt.toLowerCase()!==$scope.discountcodes[i]){
$scope.changeBack();//DOES ONLY IF INPUT DOES NOT MATCH DATA
}
else if($rootScope.discountcodeinput.attempt.toLowerCase()===$scope.discountcodes[i]){
console.log($scope.discountcodes[i]);//DOES ONLY IF INPUT MATCHES DATA
$scope.changeBackAgain();
}
}
}
答案 3 :(得分:0)
尝试使用else if语句运行一个代码然后运行另一个代码
<script>
if($scope.firstinitial==$scope.firstinput&&$scope.secondinitial==$scope.secondinput){
$scope.initialmatches="MATCHES THE INITIALS";
for (var i=0; i<$scope.discountcodes.length; i++) {
console.log($scope.discountcodes[i]);
if($rootScope.discountcodeinput.attempt.toLowerCase()==$scope.discountcodes[i]){
console.log($scope.discountcodes[i]);//DOES ONLY IF INPUT MATCHES DATA
$scope.changeBackAgain();
} else if($rootScope.discountcodeinput.attempt.toLowerCase()!=$scope.discountcodes[i]){
$scope.changeBack();
}
}
}
</script>
答案 4 :(得分:0)
显然($rootScope.discountcodeinput.attempt.toLowerCase()!=$scope.discountcodes[i]
和($rootScope.discountcodeinput.attempt.toLowerCase()==$scope.discountcodes[i]
不能同时成立。所以我猜你在$scope.changeBack()
里面做了一些神奇的来改变$rootScope.discountcodeinput.attempt
或$scope.discountcodes[i]
的值,所以当第二个if被检查时,值已经已经改变,条件已经过去了。
通过添加continue
语句,我建议您在知道完成后立即退出迭代。像这样:
for (var i = 0; i < $scope.discountcodes.length; i++) {
console.log($scope.discountcodes[i]);
if ($rootScope.discountcodeinput.attempt.toLowerCase() != $scope.discountcodes[i]) {
$scope.changeBack(); //DOES ONLY IF INPUT DOES NOT MATCH DATA
continue; // done
}
// no need to check again
console.log($scope.discountcodes[i]); //DOES ONLY IF INPUT MATCHES DATA
$scope.changeBackAgain();
}
答案 5 :(得分:0)
我明白了......
基本上for循环正在进行并检查每个对象的if语句,如果第一个对象匹配它将触发第一个if语句而不是第二个。然后for循环将继续并查看数组中的下一个对象并仅触发第二个if语句...然后它将循环使用数组中的第三个对象并再次触发第二个if语句...所以等等。
我想出的解决方法是将两者都嵌入另一个检查var值为yes的if语句中
if($scope.value=="no")
然后我将不等于if语句(!=)
放在第一位,将等于if语句(==)
放在第二位。最后,我添加了(==)
if语句:
$scope.value="yes";
因此避免在for循环的每个循环上遍历parent if语句。
感谢大家的帮助......这让我很伤心!