如果for循环中的语句都执行而不是只执行一个

时间:2016-04-18 21:15:26

标签: javascript html angularjs ionic-framework

首先,如果语句工作得很好,那么它会按照预期进入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语句触发而不是第二个。有什么想法吗?

6 个答案:

答案 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语句。

感谢大家的帮助......这让我很伤心!