Javascript 将0放置在FOR循环中会返回不需要的结果

Javascript 将0放置在FOR循环中会返回不需要的结果,javascript,Javascript,我开始学习JavaScript,到目前为止我很喜欢它。 我有这个循环,目的是在数组中定义最大的数: function max(arr) { var max = arr[0]; for (var i = 0; i < arr.length; i++) { if (arr[i] > max) { max = arr[i]; } return max; } } 但它不起作用,除非我把I改成I=1。有人能解释一下原因吗?谢谢 functio

我开始学习JavaScript,到目前为止我很喜欢它。 我有这个循环,目的是在数组中定义最大的数:

function max(arr) {
  var max = arr[0]; 
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] > max) {
      max = arr[i];
    }
    return max;
  }
}
但它不起作用,除非我把I改成I=1。有人能解释一下原因吗?谢谢

function max(arr) {
  var max = 0; 
  for (var i = 0; i < arr.length; i++) {
   if (Math.max(arr[i], max) == arr[i]) {
      max = arr[i];
   }
  }
  return max;

}

如果在for循环中生成返回指令,它会将其中断

有必要移动回路。但如果i=1,则永远看不到数组的第一个元素

function max(arr) {
   var max; 
   for (var i = 0; i < arr.length; i++) {
      if ((max !== undefined) && (arr[i] > max)) {
         max = arr[i];
      }
   }
   return max;
}
如果arr为空,这甚至会返回undefined的可能意外但可以说是正确的值。

问题 在您的实现尝试中,您有一个逻辑错误:

function max(arr) {
  var max = arr[0]; 
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] > max) {
      max = arr[i];
    }
    // return max; <-- this always returns arr[0]
  }
  return max; // <-- it should be here to work as expected
}
匹配Math.max的ECMAScript规范 对于所有可能的数组输入(空或非空),这在功能上等同于以下实现:

function max(array) {
  return Math.max.apply(Math, array)
}
从:

如果没有给出参数,结果是-无穷大

如果至少有一个参数无法转换为数字,则结果为NaN

演示 函数myMaxarray{ var max=-无穷大 对于var index=0,值;index最大值=最大值 } 返回最大值 } 函数specMaxarray{ 返回Math.max.applyMath,数组 } 功能测试输入{ 变量集=新集 console.log'input:',JSON.stringifyinput set.addmyMaxinput console.log'output:',myMaxinput',[myMaxinput',set.hasspecMaxinput?'matches':'notmatch','specMaxinput]' } 测试[-50,25,0,50,-25] 测试[-100,-80,-90,-85,-95] 测试[] 测试[0,‘格式错误’,100,20] 测试[1,2,3,4,'5.e0\t\r\n'] 试验[{ toString{return'200'}, {return 100}的值, toJSON{ 返回{ toString:this.toString, valueOf:这个 } } }] .作为控制台包装{ 最大高度:100%!重要;
}你的回报最大;在for循环内-它应该在它之外可能最大的数字在位置1,并且由于循环在第一次迭代时终止,它会意外地返回正确的值。关于返回,请更正,但索引是错误的。事实上,我不太确定我取消了我的否决票,但我认为这个Outsill不起作用,它返回数组的第一个值,就像以前一样如果我发布它,那是因为我尝试了它,它起作用了:显示你的array@Superdrac如果所有arr值均为负值,则会给出错误答案。谢谢!它确实奏效了。出于某种原因,我的电脑表现得非常怪异,必须创建一个新文件并将其链接到html,才能正常工作,不知道为什么。坦克再返回-空阵列无限大。我认为这是不正确的,因为数组是空的,而不是带有-Infinity元素的数组。@manassehkatz,正如我所说的,这是设计的,并且遵循JavaScript规范,因为这是Math.max的行为-但这是OP想要的吗?诚然,当我看到Math.max可用时,我只会选择Math.max。谢谢你提供的信息性评论!“我会调查的。”帕特里克·罗伯茨和OP毕竟更喜欢你的答案。
function max(array) {
  return Math.max.apply(Math, array)
}