了解数组中的循环

Understanding Loops in Arrays

本文关键字:循环 数组 了解      更新时间:2023-09-26

试图理解这一点及其工作原理。基本上,目标是让用户输入密码以"获得访问权限"。这是代码,但我正在努力准确地理解它。

真的有几个问题:1.为什么输出首先被声明为无访问,为什么不是其他如果不起作用?2.如果有人能解释I=0,我对整个Loop函数的工作原理感到非常困惑;userPassword.length>i;i++

function btnCheckCode_onclick()
{
    // assign textbox elements to variables for easier access
    var userInputTextbox = document.getElementById("txtCode");
    var outputTextbox = document.getElementById("txtOutput");
    var userInput = userInputTextbox.value
    var userPassword = ["Admin", "Secret", "Letmein", "abc123", "qwerty"];
    var output = "Sorry, No Access";
    for(i = 0; userPassword.length > i ; i++ )
    {
        if(userPassword[i] == userInput) 
        {
            output = "Welcome Privileged User";
        }
    }
    userInputTextbox.value = userInput
    outputTextbox.value = output
}

它循环遍历密码数组,查看是否与给定密码匹配。

  • 它使用I作为计数器,并将其初始化为0。

  • 每次循环运行时都会评估下一部分,以检查循环是否应该继续。在这种情况下,只有当i小于密码长度时,它才会继续。

  • 每次运行循环时,i++部分都会增加循环计数器。

话虽如此,请不要在任何地方使用此代码。在客户端中不应该检查密码。每个人都可以看到这个代码,绕过这个检查非常简单。

循环之前设置output的值:

var output = "Sorry, No Access";

并且仅当环路内的条件发生变化时

userPassword[i] == userInput

计算为CCD_ 2。因此,你的第一个问题的答案是,你正在自己设定特定的初始值。

关于第二个问题,循环结构的参数:

i = 0; i < userPassword.length; i++ 

定义为:

variable = initial value; variable < limit; increment variable after iteration

换句话说,您声明变量i并将其设置为0;你告诉解释器只要i的值小于极限值,或者特别是userPassword数组的长度,就要迭代;并且在每次迭代之后将CCD_ 7添加到CCD_。

在第一循环迭代i=0内部并且在其之后为i=1。由于userPassword的长度是5,因此循环将继续。在第二次迭代之后,i == 2,并且循环继续直到i == 5。由于CCD_ 15的5个索引被识别为CCD_。

for循环正在遍历userPassword数组。数组的长度现在是5,但将来可能会改变。使用数组的长度作为条件的一部分意味着,如果使数组变长或变短,就不必更改循环。

对于循环,您需要一个将充当迭代器的变量:i。数组中的项的索引范围从0到1,小于数组的总长度。您希望迭代器i的值从数组的开头0开始,一直到末尾。

在您的情况下,循环的结束也是数组的结束,它由您的条件定义:userPassword.length > i

当您有类似true0的东西时,它表示数组在此索引处保持的值——在循环过程中,i将被一个整数替换。在循环中,您将逐个索引迭代,并将该索引处的数组中的值与用户输入的值进行比较,直到迭代器达到条件定义的极限。

对于第一个问题,通常在函数开始时初始化每个变量。在函数运行之前,output可能是任何东西,但通过用消息初始化output,就不会有试图处理未定义变量的风险。

此for指令是一个循环,它遍历可能的用户密码列表,并将其与输入的密码进行比较,如果匹配,则更改输出:

// assign textbox elements to variables for easier access
var checkPassword = function () {
    var userInputTextbox = document.getElementById("txtCode");
    var outputTextbox = document.getElementById("txtOutput");
    var userInput = userInputTextbox.value;
    var userPassword = ["Admin", "Secret", "Letmein", "abc123", "qwerty"];
    var output = "Sorry, No Access";
    for(i = 0; i < userPassword.length; i++ )
    {
        if(userPassword[i] == userInput) 
        {
            output = "Welcome Privileged User";
        }
    }
 
    outputTextbox.innerHTML = output;
  }
<input id="txtCode" value="Admin">
<div id="txtOutput"> </div>
<button onclick="checkPassword()">Check</button>

  1. 因为如果用户没有键入任何字符串"Admin"、"Secret"、"Letmein"、"abc123"、"qwerty",则输出之后不需要设置为"Sorry,No Access",因为这是默认值。

  2. i=0:是i的起始值,userPassword.length>iuserPassword.length是数组中的元素数=>5i++意味着在每次迭代之后,将i设置为i+1

循环只检查用户输入是否与userPassword数组中的一个字符串匹配。如果匹配,则输出将设置为"Welcome Privileged user"。问题是,如果用户键入"Admin",循环也会检查其他四个值。

userPassword.some(password => {
  if(password == userInput){
     output = "Welcome Privileged User";
  }
  return password == userInput;
});
if(userPassword[i] == userInput) {
   output = "Welcome Privileged User";
} else {
   output = "Sorry, No Access";
}

我添加了其他,现在让我们检查变体:

0 iteration: true -> output = "Welcome Privileged User";
1 iteration: false -> output = "Sorry, No Access";
2 iteration: false -> output = "Sorry, No Access";
3 iteration: false -> output = "Sorry, No Access";
4 iteration: false -> output = "Sorry, No Access";

因此,输出="对不起,没有访问权限">(但我们有真正的迭代(。这是因为如果条件为false,则else语句重写变量输出

当我们为循环在之前定义输出时,只有当条件if(userPassword[i] == userInput)返回true时,输出才能更改值。所以,这个变体是正确的。

关于循环的for循环通常是您想要创建循环时使用的工具。

for循环具有以下语法:

for (statement 1; statement 2; statement 3) {
    code block to be executed
}

在您的情况下:

 for(i = 0; userPassword.length > i ; i++ ) {
        code block to be executed
    }

语句1在循环开始之前设置一个变量(var i=0(。

语句2定义循环运行的条件(userPassword.length必须大于i(。

语句3每次执行循环中的代码块时都会增加一个值(i++(。

对于循环,在内部有if语句。

   if(userPassword[i] == userInput) {
      output = "Welcome Privileged User";
    }

数组userPassword = ["Admin", "Secret", "Letmein", "abc123", "qwerty"]的每个元素与userInput:进行比较

if(userPassword[0] == userInput) => if("Admin" == userInput)
if(userPassword[1] == userInput) => if("Secret" == userInput)
if(userPassword[2] == userInput) => if("Letmein" == userInput)
if(userPassword[3] == userInput) => if("abc123" == userInput)
if(userPassword[4] == userInput) => if("qwerty" == userInput)

如果其中一个条件返回true,则我们为变量输出设置"Welcome Privileged User">。如果所有条件都是false,我们保留定义值"对不起,无法访问">

一句话:

 for(i = 0; i < userPassword.length; i++)

这种语法更有用,更容易理解。

你可以在这里找到一些例子:JavaScript For Loop