【问题标题】:Javascript How can i make the 'else' output something only once?Javascript 我怎样才能让'else'只输出一次?
【发布时间】:2017-07-25 02:35:04
【问题描述】:

我一直在用二维数组试验 for 循环,显然我是 javascript 和一般编程的新手。我试图在数组中找到一个 var,如果找到则输出成功消息,如果不输出失败的消息。每当我让代码输出失败的消息时,它会在控制台上出现 4 次,并且仍然显示成功消息..

失败时的预期输出:

No matching keyword was found

结果输出:

The keyword String is found 
No matching keyword was found 
No matching keyword was found 
No matching keyword was found 
No matching keyword was found

newArray = [["String","Sa"],[1,2,35]];


var find = "String";
for(var i=0; i< newArray.length;i++){
    for(var j=0; j < newArray.length + i; j++){
        if (newArray[i][j] === find){
            console.log("The keyword " + find + " is found");
        } else {
            console.log("No matching keyword was found");
        }
    }

}

【问题讨论】:

  • 方法一:用变量表示之前输出过,不输出。方法 2:重新考虑你的代码,就目前而言,它并没有多大意义
  • 我觉得你的loop 不错。它确实会遍历您的所有数据。你有 5 个项目,所以它肯定会进行 5 次比较。给定比您登录的每次比较,您总共获得 5 个日志。 1 个找到了,其余的没有找到。
  • @Jalil 感谢您的意见

标签: javascript arrays for-loop multidimensional-array


【解决方案1】:

就像他们说的那样,使用变量作为指标。

newArray = [["String","Sa"],[1,2,35]];


var find = "String";
var found = false;
for(var i=0; i< newArray.length;i++){
    for(var j=0; j < newArray[i].length + i; j++){
        if (newArray[i][j] === find){
            console.log("The keyword " + find + " is found");
            found = true;
        }
    }

}
if (!found) {
    console.log("No matching keyword was found");
}

请对我们的代码进行分析比较,以免您以后再问类似的问题。

现在,通过在我们“找到”匹配后不迭代其他元素来尝试优化上述内容。

【讨论】:

  • 谢谢,我应该好好想想
【解决方案2】:

您的第二个循环不正确。

在你的内部循环中,你必须循环newArray[i] 另外,当搜索成功时,使用break

还可以使用变量来表示操作已经结束。

 newArray = [["String","Sa"],[1,2,35]];

 var find = "String";

  var end = false;
   for(var i=0; i< newArray.length;i++){
        for(var j=0; j < newArray[i].length; j++){
               if (newArray[i][j] === find){
                    console.log("The keyword " + find + " is found");
                     end = true;
                     break;
                } else {
                     console.log("No matching keyword was found");
                 }
          }
           if (end) {
                 break;
            }
     }

【讨论】:

    【解决方案3】:

    newArray = [["String","Sa"],[1,2,35]];
    
    
    var find = "String";
    for(var i=0; i< newArray.length;i++){
        for(var j=0; j < newArray[i].length + i; j++){// <--- you want to iterate only as many times as the inner array elements. Right now you iterate over the same array index as the first loop.
            if (newArray[i][j] === find){
                alert("The keyword " + find + " is found");
                return; //<-- end script after result is found
            } 
        }
    }
    //Will only get here if the return was not hit
    alert("No matching keyword was found");

    您会看到它 4 次,因为循环将继续运行,直到它遍历所有内容。一种方法是在找到结果后结束脚本。

    如果你想采用光滑的 es6 方法:

    newArray = [["String","Sa"],[1,2,35,"String"]];
    const term = "String2";
    const isFound = newArray.some(e=>e.find(e=>e===term));
    alert(`The keyword has ${isFound ? "" : "not"} been found`);

    【讨论】:

      【解决方案4】:

      使用布尔值存储标志“isFound”,并在找到时中断。

      newArray = [["String","Sa"],[1,2,35]];
      var find = "String";
      var isFound = false;
      for(var i=0; i< newArray.length;i++){
          for(var j=0; j < newArray.length + i; j++){
              if (newArray[i][j] === find){
                  console.log("The keyword " + find + " is found");
                  isFound = true;
                  break;
              }
          }
      }
      if (isFound == false){
      console.log("No matching keyword was found");
      }
      

      【讨论】:

        猜你喜欢
        • 2020-11-28
        • 1970-01-01
        • 2018-07-01
        • 2022-09-27
        • 2011-01-16
        • 2017-08-30
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多