【问题标题】:The minimum even value in the array数组中的最小偶数值
【发布时间】:2012-06-06 03:12:30
【问题描述】:

所以,我有这个程序要求数组中的最小偶数值,我已经编写了代码,但我似乎错过了一个循环。我会写正确的代码,但我希望有人能解释为什么会有一个while循环

    <HTML>
    <HEAD>
    <SCRIPT LANGUAGE = "JavaScript">

    var number=new Array(10)

  for(var i=0; i<number.length; i=i+1)
{ 
   number[i] =window.prompt('enter number ','')
   number[i] =parseFloat(number[i])
}

  var y = 0 
  while (number[y] % 2 != 0) //get the first even number in the array
{
    y = y + 1
}
//after you exit the while loop y will have the index of the first even number 

var Min 
Min = number[y] 

 for(var i=0; i<number.length; i=i+1)
{
    if (number[i] % 2 == 0)
    {
            if(number[i]<Min)
            {
                    Min= number[i]
            }
    }
}

document.write(Min)

</SCRIPT>
</HEAD>
</HTML>

所以,这部分

  var y = 0 
  while (number[y] % 2 != 0) //get the first even number in the array
{
    y = y + 1
}
//after you exit the while loop y will have the index of the first even number 

我发现很难真正掌握这个循环,如果我可能会问:还有其他方法可以找到数组中的最小值吗? 非常感谢!

【问题讨论】:

    标签: javascript arrays loops for-loop while-loop


    【解决方案1】:

    while 循环设置Min 的第一个值,以便后续比较工作。这里是远 做同样事情的更简单和更快的方法:

    var min = Infinity; // Start with the biggest number possible
    for (var i=myArray.length;i--;){
      var val = myArray[i];
      if (val<min && val%2==0) min = val;
    }
    

    这更快,因为 - 与原始代码不同 - 这不会对第一个非偶数值进行两次迭代。如果原始中的for 循环从索引y 开始,即for (var i=y+1;i&lt;number.length;++i)

    ,则速度大致相当

    它也稍微快一点,因为for 循环缓存了数组的长度而不是每次都查找它,并且因为它每次循环只查找数组中的值一次,而不是三次。然而,像 V8 这样的现代 JavaScript 运行时可以优化幼稚代码以使其行为相似,因此这不是很重要的一点。


    编辑:为了好玩,这里有一种现代的函数式编程方法:

    var min = Math.min.apply(Math,myArray.filter(function(n){ return n%2==0 }));
    

    上面使用Array.filter 创建一个新数组,其中包含偶数项,然后使用Function.prototype.apply 将值数组作为参数传递给Math.min

    【讨论】:

    • @aablah 既然您问到“另一种找到最小值的方法”,我已经编辑了我的答案以添加一个替代循环遍历所有值的方法。如果你觉得这已经解决了你的问题,你应该accept this answer
    【解决方案2】:

    如果您对如何在现代 Javascript 中做到这一点感兴趣,可以这样:

    minEvenElement = Math.min.apply(Math, myArray.filter(function(e) { return !(e % 2) }))
    

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 2022-10-17
      • 2016-09-10
      • 2013-02-02
      • 2021-11-27
      相关资源
      最近更新 更多