【问题标题】:How to execute else block only once inside the for loop ?如何在 for 循环中只执行一次 else 块?
【发布时间】:2017-02-04 19:07:15
【问题描述】:

在下面的代码中,sn-p if 块仅在 myCity == cites 时才会显示成功警报,然后中断循环执行。但在执行 if 块之前 else 块将执行每个索引(例如:cites[0]、cites[1]、cites[2])并显示失败警报,直到 if 块成功。

但是我想在整个执行过程中只显示一次失败的警报消息,任何人都可以帮助我吗?

    var cites = [ "Bangalore", "Chennai", "Delhi", "Mumbai", "Cochin", "Mysore" ];
    var myCity = "Mumbai";
    for (i = 0; i < cites.length; i++) {
        if (myCity == cites[i]) {
            alert("Success:" + cites[i]);
            break;
        } else {
            alert("Failed:" + cites[i]);
        }
    }

【问题讨论】:

  • 听起来你真正想要的是alert(cites.includes(myCity) ? "Success" : "Failed);
  • show failed only once 是什么意思——当你不匹配任何东西时你想要失败的消息吗?或者你想要任何不匹配的东西失败? (它们是不同的条件)
  • 如果失败应该注意什么?
  • 他的代码现在的方式是,数组中的每个失败项都将alert else 块中的失败项。通过仅显示一次失败,他希望显示一个包含所有失败项目的警报。他还想提醒失败的项目,即使有一个成功的项目。这对我来说没有多大意义,但这是我理解的。

标签: javascript if-statement for-loop


【解决方案1】:

我知道你想显示failed,即使有一个成功的项目。所以,在另一个数组中存储失败,稍后再显示:

    var cites = [ "Bangalore", "Chennai", "Delhi", "Mumbai", "Cochin", "Mysore" ];
    var failed = [];
    var myCity = "Mumbai";
    for (var i = 0; i < cites.length; i++) {
        if (myCity == cites[i]) {
            alert("Success: " + cites[i]);
        } else {
            failed.push(cites[i]);
        }
    }
    if (failed.length > 0)
    	alert("Failed: " + failed);

【讨论】:

    【解决方案2】:

    你可以使用some(见https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/some):

    var cities = [ "Bangalore", "Chennai", "Delhi", "Mumbai", "Cochin", "Mysore" ];
    var myCity = "Mumbai";
    if (cities.some(function(city){
      return city == myCity
    })) {
      alert("Success " + myCity);
    } else {
      alert("Failed:" + myCity);
    }

    【讨论】:

      【解决方案3】:

      如果找到结果,您可以使用额外的变量来存储。

      var cites = ["Bangalore", "Chennai", "Delhi", "Mumbai", "Cochin", "Mysore"];
      var myCity = "Mumbai";
      var found = false;
      for (i = 0; i < cites.length; i++) {
        if (myCity == cites[i]) {
          alert("Success:" + cites[i]);
          found = true;
          break;
        }
      }
      
      if (!found) {
        alert("Failed");
      }

      【讨论】:

        【解决方案4】:

        var cites = [ "Bangalore", "Chennai", "Delhi", "Mumbai", "Cochin", "Mysore" ],
            myCity = "Mumbai",
            success = false;
        
        for (i = 0; i < cites.length; i++) {
            if (myCity == cites[i]) {
                alert("Success:" + cites[i]);
                success = true;
        
                break;
            }
        }
        if (!success) {
            alert("Failed:" + cites[i]);
        }

        这段代码是正确的。

        【讨论】:

          猜你喜欢
          • 2019-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-22
          • 1970-01-01
          • 1970-01-01
          • 2019-06-20
          • 2017-04-26
          相关资源
          最近更新 更多