【问题标题】:Could someone explain how this function works in laymans terms?有人可以用外行的术语解释这个功能是如何工作的吗?
【发布时间】:2023-03-14 07:52:01
【问题描述】:

所以我知道这段代码在做什么,它正在检查代码是否“统一”,例如a,a,a,a,a,a1,1,1,1,1,1,如果不是,则返回错误语句。但是我不确定这个等式是如何工作的。大多数情况下,我对array[0] 以及为什么变量是i = 1 感到困惑。有人可以告诉我这里发生了什么以及为什么会这样吗?

function isUniform(arr){
    var first = arr[0];
    for(var i = 1; i < arr.length; i++){
        if(arr[i] !== first){
            return false;
        }
    }
    return true;
}

【问题讨论】:

  • 如果你能发布你认为它是如何工作的,那将会有很大帮助。我们只能猜测您的技能水平。
  • 所以我读到第一个变量数组是零,for语句中的var是i = 1,任何小于数组长度的都加1。如果该数组不等于 0,则返回 false。这就是为什么我很困惑,它不应该希望它等于自己以返回一个 true 吗?
  • 另一种写法是:var first = arr[0]; return arr.every(val =&gt; val === first);
  • arr[0] 指的是数组中的第一个元素。如果一个数组有 4 个元素,它们将是 arr[0], arr[1], arr[2], arr[3]
  • 您似乎对数组的概念感到困惑。如果你把一个变量想象成一个名字可以容纳一个值的盒子,那么一个数组就被命名为这样的盒子的行,每个盒子都有一个数字。当您想在其中一个框中输入值或查看其中一个值时,您可以将框的编号放在名称后面的方括号中,如arr[0]arr[3]。一些(愚蠢的)语言从一开始对框进行编号(1,2,3,...),JavaScript 从零开始(0,1,2,...)

标签: javascript arrays algorithm


【解决方案1】:

已在代码中使用// 给出了 cmets,希望对您有所帮助

function isUniform(arr){
    var first = arr[0]; //storing the first value in the array in variable 'first'
   //arr.length gives the number of elements in the array
   //looping between numbers 1 and the end of the length of array (array.length)
    for(var i = 1; i < arr.length; i++){ 
        if(arr[i] !== first){ //checking if current value (arr[i]) is equal to first value
            return false;//if it is not equal returning false and return ends the loop and function
        }
          //if all the values are equal the above if condition never runs
    }
    //if above if condition never runs, this statement runs and returns true
    return true; 
}

【讨论】:

  • 这很有帮助,但我想 for 语句仍然令人困惑。我读它就像一个数学方程。我必须将其视为每次将检查点向下移动一个对吗?所以既然 0 已经被检查过了,它从 1 开始,检查它与 arr[0] 数字是否相同,如果相同则移动到下一个数字?
  • for 语句只是一个简写。 for ( A; B; C ) { body } 与以下内容基本相同:A; while (B) { body; C }
  • 看到i = 1 并认为这是数学是一个常见的错误。这就是说将值1 放入名为i 的“框”(变量)中。它的正确名称是*赋值语句”——变量的值被赋值。在其他一些语言中,赋值运算符不是=,而是看起来更像箭头的东西,如i &lt;- 1i := 1 和这似乎更清楚了。
【解决方案2】:

JavaScript 中的数组是从零开始的。因此行

var first = arr[0]

表示传入数组的arr 参数的第一个元素。它永远不会改变。

循环

for(var i = 1; i < arr.length; i++)

遍历除第一个元素之外的所有数组,从第二个元素 (arr[1]) 开始到最后一个元素。在此过程中,语句if(arr[i] !== first) 只是将每个数组元素(第一个除外)与存储在first 中的第一个数组元素进行比较。如果任何一个不匹配,则返回 false,否则返回 true。如果输入数组是[1,2,3,4,5],那么arr[0]=1, arr[1]=2, arr[2]=3... 和第一个数组元素(和变量first)的值将是1,循环将遍历其余的数组值(@987654332 @)。因此它会在第一次迭代时返回 false,因为 1 不等于 2。

这个函数没有什么特别之处,因为它所做的只是遍历数组的值,比较元素。

【讨论】:

  • 好的,所以我想我会遵循一点,但也许不会。所以假设我的数组是 [3,3,3,3,3,2] 部分 arr[0] 实际上只是存储数字 3 对吗?因此,令人困惑的部分仍然是循环部分。我们是否将 3 更改为 1,然后确保 1 小于数组长度 1+1?
  • arr[0] 是 3 是正确的。0 指的是数组的第一个元素。循环独立于数组。它只是从 1 数到数组的末尾。在评论中使用您的示例,它将计算 1、2、3、4 和 5。因此,当循环第一次运行时,它比较 arr[1] 这是数组中的第二个值(数组的索引从零开始)和也是 3. 并一直持续到数组的末尾。循环中的i 变量只是用作计数器。它从 1 增加到 5,以便我们可以检查数组的每个元素。
  • 再次在评论中使用您的示例,arr[1], arr[2], arr[3], and arr[4] 都包含相同的3 值。它是包含2 的最后一个数组元素arr[5]。循环使用i 选择数组元素。 i 从 1 变为 5。
  • 好的,我想我开始明白了,所以基本上这个方程只是告诉计算机继续移动到下一个数组并检查 arr[0]?跨度>
  • 循环似乎有点让你绊倒。在developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 上查看有关 for 循环的更多信息
【解决方案3】:

首先,我们将数组的第一个元素存储到变量first 中。然后我们开始循环遍历数组的其余元素(这就是为什么i1 开头,因为不需要将元素与其自身进行比较)。如果当前元素arr[i]与第一个元素first不同(表示数组不统一),则函数返回false(函数返回时立即退出,不再与其他元素比较数组元素)。如果我们遍历数组的所有元素并退出循环,那么我们没有找到任何不同的值,所以数组是统一的,因此我们返回 true 并退出函数。

【讨论】:

    【解决方案4】:

    javascript 中的长度不是基于 0 的。所以下面的数组长度为4。

    [1,2,3,4]
    

    另一方面,数组是从 0 开始的,因此要获得该数组的第 4 个元素,您需要执行 arr[3] 等于 4。方括号内的数字表示数组中的位置,而不是值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-18
      • 2012-01-30
      • 2015-11-25
      • 1970-01-01
      • 2021-05-11
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多