Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 此函数的Math.max_Javascript - Fatal编程技术网

Javascript 此函数的Math.max

Javascript 此函数的Math.max,javascript,Javascript,我需要创建一个HTML页面,添加三个文本框,用户将在其中输入三个数字:a,b,c 然后,我会有一个按钮,点击后,将计算三个的最大数量。结果将显示在警报中。如果用户没有输入一个或两个数字,程序不应该崩溃 案例: 如果没有引入数字,则应显示一条消息,要求用户输入至少一个数字 如果只引入三个数字中的一个,则该数字为最大数字 如果引入了两个数字,则应显示两个数字中的最大值 如果引入了三个数字,则应显示三个数字中的最大值 我得到了NaN警报弹出窗口,但我需要一个警报,显示“输入至少一个数字”。这就是我

我需要创建一个HTML页面,添加三个文本框,用户将在其中输入三个数字:
a
b
c

然后,我会有一个按钮,点击后,将计算三个的最大数量。结果将显示在警报中。如果用户没有输入一个或两个数字,程序不应该崩溃

案例:

  • 如果没有引入数字,则应显示一条消息,要求用户输入至少一个数字

  • 如果只引入三个数字中的一个,则该数字为最大数字

  • 如果引入了两个数字,则应显示两个数字中的最大值

  • 如果引入了三个数字,则应显示三个数字中的最大值

我得到了
NaN
警报弹出窗口,但我需要一个警报,显示
“输入至少一个数字”
。这就是我尝试过的:

function max(){
var a=parseInt(document.getElementById(“num1”).value);
var b=parseInt(document.getElementById(“num2”).value);
var c=parseInt(document.getElementById(“num3”).value);
var max=0;
var end=Math.max(a,b,c)| Math.max(a,b)| Math.max(a)| Math.max(a,c)| Math.max(b,c);
警报(结束);
nbs=[a,b,c]。过滤器(nb=>!isNaN(nb));
if(伊斯南(a)和伊斯南(b)和伊斯南(c)){
警报(“输入至少一个数字”);
}否则{
控制台日志(数学最大值(nbs));
}
}

我该怎么办?

这里有两种方式,一种是暴力方式,另一种是暴力方式

function max(){
  var a=parseInt(document.getElementById("num1").value);
  var b=parseInt(document.getElementById("num2").value);
  var c=parseInt(document.getElementById("num3").value);
  var max = 0;

  if (isNaN(a) && isNaN(b) && isNaN(c)) {
    alert("Input at least one number");
  }
  else if (isNaN(a) && isNaN(b)) {
    alert(c);
  }
  else if (isNaN(a) && isNaN(c)) {
    alert(b);
  }
  else if (isNaN(b) && isNaN(c)) {
    alert(a);
  }
  else if (isNaN(a)) {
    alert(Math.max(b, c));
  }
  else if (isNaN(b)) {
    alert(Math.max(a, c));
  }
  else if (isNaN(c)) {
    alert(Math.max(a, b));
  }
  else {
    alert(Math.max(a, b, c));
  }

}
这将是暴力的方式,这是我想到的第一种方式

相反,你也可以做同样的事情,比如你把一个b和c设置为一个非常小的数字,如果它是空的

function max(){
  var a=parseInt(document.getElementById("num1").value)||-10000;
  var b=parseInt(document.getElementById("num2").value)||-10000;
  var c=parseInt(document.getElementById("num3").value)||-10000;
  var max = 0;

  var end = Math.max(a, b, c);

  if (end == -10000) {
    alert("Input at least one number");
  }
  else {
    alert(end);
  }


}

以下是一种通过几行代码实现的方法:

  • 首先选择所有
    input
    元素并将它们放入数组中。将它们映射到输入值的数组。无论它们是否为整数,都将通过
    parseInt()
    传递:

    let nbs = [...document.querySelectorAll('.nb')].map(e => parseInt(e.value))
    
  • 然后我过滤它们,只保留整数。小心点,因为NaN==“number”的类型是真的。。。因此,还要确保它不是
    NaN

    let nbsF = nbs.filter(e => ( typeof e == "number" && !isNaN(e) ) )
    
  • 最后,通过检查数组是否至少有一个对象(即至少有一个数字,因为它已被过滤为仅包含数字)来返回结果。如果数组不包含任何数字,请返回字符串:

    return nbsF.length ? Math.max(...nbsF) : 'input at least one number'
    
let max=function(){
让nbs=[…document.querySelectorAll('.nb')].map(e=>parseInt(e.value))
设nbsF=nbs.filter(e=>(e的类型==“number”&&&!isNaN(e)))
返回nbsF.length?Math.max(…nbsF):“输入至少一个数字”
}


获取最大值
在赋值后使用
| 0
时,我会获得最佳结果。这确保
a
b
c
获得一个值。然后,在查找
end
时,可以取出所有的or
Math.max
。下面是一段代码片段:

function max(){
var a=parseInt(document.getElementById(“num1”).value)| 0;
var b=parseInt(document.getElementById(“num2”).value)| 0;
var c=parseInt(document.getElementById(“num3”).value)| 0;
var end=数学最大值(a、b、c);
如果(a==0&&b==0&&c==0){
警报(“输入至少一个数字”);
}否则{
警报(结束);
}
}
var submit=document.getElementById(“提交”);
submit.addEventListener('click',()=>max())


提交
Math.max(a,b,c)
应该足以计算最大值,为什么其他4个?如果我使用
Math.max(a,b,c)
如果我输入1或2个数字,我会收到一个警报
NaN
这就是为什么我会使用其余的数字,但是如果我不输入任何数字,我会得到
NaN
而不是“输入至少一个数字”啊,是的,你应该检查
var a=parseInt(document.getElementById(“num1”).value)|
为了防止中断
null
@dandavis,只有在不需要/不允许负数的情况下,这才有效。Leny,你能更新一下问题来澄清一下情况吗?您希望如何处理负数?另外,请注意,如果用户能够输入以数字开头的字符串,例如,
parseInt(“8s”)==8
@lenylester,则
parseInt
可能并不理想。没问题!记住对答案进行投票,并将其标记为正确答案;)我刚加入这个论坛。我没有足够的声誉yetOk,您仍然可以标记为正确答案,只需单击此旁边的复选标记。这对我有用。ty 4这个代码。我不能超过你,因为我刚刚加入这个论坛。“又是泰。”LenyLestter我对被接受的答案感到惊讶。。。我想知道当你想要五个
输入框而不是三个时会发生什么…@Ivan我已经更新了我的答案,加入了一种更为动态的方式。这样他就可以有一千个输入框而不是三个`返回nbsF.sort().pop()| |'至少输入一个数字''。事实上,我没有想到这一点,我添加了它作为替代。谢谢@lucchi的分享。我只是想指出一个事实,这里没有数学;)想知道为什么要使用
let
关键字吗?您是否计划稍后更改
max
函数或
nbs
变量?还有,为什么你在这之后马上使用
var
?@corykliser你变得挑剔了吗?为什么要投否决票?