【问题标题】:How do I stop my conditional from running both the if clause and else clause while inside of a for loop?如何在 for 循环内停止条件语句同时运行 if 子句和 else 子句?
【发布时间】:2016-08-10 00:56:09
【问题描述】:

我有一个循环遍历的数组,以测试循环中是否存在用户提供的字符串。当我运行循环并进行检查时,它在匹配的数组项上返回 true,在不匹配的数组项上返回 false。我知道这是因为我正在检查每个单独的数组项。我的问题是,如果字符串与数组项匹配,我如何才能得到 true?

var string = "a";
var array = ["a", "b", "c"];
for(var i = 0; i < array.length; i++){
    if(string == array[i]){
        console.log("Exists");
    }
    else{
        console.log("Doesn't exist");
    }
}

现在,如果我要运行它,我会看到:

"Exists" "Doesn't exist" "Doesn't exist"

【问题讨论】:

  • 你必须使用break关键字

标签: javascript arrays


【解决方案1】:

你可以使用 Es6 的includes() 来做到这一点,

var str = "a";
var arr = ["a", "b", "c"];
var res = arr.includes(str);
if(res) console.log("exists");

如果您担心浏览器支持,请使用indexOf()

var str = "a";
var arr = ["a", "b", "c"];
var res = (arr.indexOf(str) > -1);
if(res) console.log("exists");

【讨论】:

    【解决方案2】:

    使用.some() 方法

    需要注意的是,.some() 将在返回第一个真值后停止执行,而 .forEach().filter() 每次都会遍历整个数组。根据阵列的大小,这可能会对性能产生严重影响。

    var string = "a";
    var array = ["a", "b", "c"];
    var exists = array.some(function (elem, index) {
      return string == elem;
    });
    if (exists) {
      console.log("Exists");
    }
    else {
      console.log("Doesn't Exist");
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用Array.filter 仅获取匹配项:

      var string = "a";
      var array = ["a", "b", "c"];
      
      var matches = array.filter(function(item) {
         return item === string;
      });
      

      或者 ES6

      var matches = array.filter(item => item === string);
      

      如果您只想使用true/false,也可以使用Array.some

      array.some(item => item === string); // true
      array.some(item => item === 'foo'); // false
      

      【讨论】:

        【解决方案4】:

        你可以使用for..of循环,break

        var string = "a";
        var array = ["a", "b", "c"];
        for (let prop of array) {if (prop === string) {console.log("Exists"); break;}};

        【讨论】:

          【解决方案5】:

          试试:

          var string = "a";
          var array = ["a", "b", "c"];
          var found = false;
          for(var i = 0; i < array.length; i++){
              if(string == array[i]){
                  found = true;
                  break;
              }
          }
          if (found === true){
              console.log("Exists");
          }
          else{
              console.log("Doesn't exist");
          }
          

          【讨论】:

          • 我会在 found = true; 之后添加 break否则,即使您找到了答案并浪费处理时间,您也会遍历整个数组。
          • 好点。已编辑,但实际上 indexOf 可能是更好的解决方案。
          猜你喜欢
          • 2014-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多