Javascript—如何编写一个函数,在任何一组数值参数中查找最大值

Javascript—如何编写一个函数,在任何一组数值参数中查找最大值,javascript,function,for-loop,arguments,max,Javascript,Function,For Loop,Arguments,Max,我正在完成一个关于javascripthero()的练习,我能够让这个函数工作,但是,我希望有人能告诉我为什么它工作。我真的很感激 挑战是。。。 “编写一个函数max,用于计算任意数目的最大值。 示例:max(1,2)应返回2,max(2,3,1)应返回3。“ 我的答案是 function max (){ let ans=0; for (let i = 0; i < arguments.length; i++) { if (arguments[i] &g

我正在完成一个关于javascripthero()的练习,我能够让这个函数工作,但是,我希望有人能告诉我为什么它工作。我真的很感激

挑战是。。。 “编写一个函数max,用于计算任意数目的最大值。 示例:max(1,2)应返回2,max(2,3,1)应返回3。“

我的答案是

function max (){

    let ans=0;

    for (let i = 0; i < arguments.length; i++) {
        if (arguments[i] > ans){
            ans= arguments[i];
        }
    }
    return ans;
}
函数最大值(){
设ans=0;
for(设i=0;ians){
ans=参数[i];
}
}
返回ans;
}
我不明白的是将ans设置为零,然后说如果参数[I]大于零,那么这就是答案。从理论上讲,零上的第一个参数不会作为答案返回吗?另外,如果传入的参数是负数,例如(-1,-5,-15),该怎么办?那么这个功能会不起作用吗


我真的非常感谢您对此的任何意见。即使我得到了正确的答案,我还是想了解代码中发生了什么。谢谢!:)

可以将第一个参数作为本地最大值,然后从第二个参数开始迭代

function max(){
设ans=arguments[0];
for(设i=1;ians){
ans=参数[i];
}
}
返回ans;
}
log(max());

console.log(最大值(3,2,1))看起来像
ans
最初仅为0。
ans
的值在每次比较时都会发生变化

因此,假设您将数组
[1,2,5,4]
传递给
max
函数,它将按如下方式运行:

  • 1比0大吗?是的,因此
    ans
    变为1
  • 2比1大吗?是的,因此
    ans
    变为2
  • 5比2大吗?是的,因此
    ans
    变为5
  • 4比5大吗?否,因此
    ans
    保持为5,并作为最大数返回给用户

逻辑是一次比较两个数字,以确定哪个数字更大。
只有当参数中的所有数字都是正整数时,您提供的代码才会起作用。

可能会给出一些约束,例如没有负值或至少有一个参数。更合适的解决方案是将初始
ans
设置为数组的第一个元素,然后从元素1开始循环。(如果数组为空,则可能返回
undefined
)您应该正确缩进代码,您将看到参数上的for循环。同样是的,对于负数,这将失败。尝试将ans初始化为NaN,并在循环中在实际的更大检查ALNITAK之前检查ans是否为NaN-非常好的advice。非常感谢。我试过了,它也适用于所有负数。网友-谢谢你的回答。你能再解释一下最后一句话吗?我还在学习。所以你说ans=arguments[I]是循环的一部分,因此ans只有在条件(if(arguments[I]>ans)改变时才会改变是否满足?如果满足,这是有意义的。非常感谢!是的,因此
ans
仅在与大于它的值进行比较时才会更改。正如其他人所说,此代码有一些用例会导致错误或bug,但从学习的角度看,它确实起作用。