JavaScript数组计算min、max值结果不符合预期问题求助
错误根因
- 输入值的类型错误:你从文本输入框获取的
value默认是字符串类型,直接存入数组后,findMax、findMin里的大小比较是按照字典序执行,而非数值大小比较。
举个例子:你存入的"5"和"30"做比较时,会先对比两个字符串的第一个字符,"5"的Unicode编码大于"3",所以会判定"5" > "30",最终得到完全颠倒的计算结果。
修复方案
修改addNum函数的取值逻辑,把输入值转为数值类型后再存入数组即可,修改后的代码如下:
function addNum() { // 把输入值转为Number类型 var num = Number(document.getElementById("input").value); // 可选:增加非法输入校验,避免非数值存入数组 if (isNaN(num)) { alert("请输入合法数字"); document.getElementById("input").value = null; return; } array.push(num); document.getElementById("input").value = null; document.getElementById("confirmation").innerHTML = "Num " + num + " has been entered."; document.getElementById("array").innerHTML = "array: " + array; }
如果你不需要自己实现遍历逻辑,也可以直接调用JS内置的API简化计算:
- 求数组最大值:
const max = Math.max(...array) - 求数组最小值:
const min = Math.min(...array)
额外注意事项
- 你的HTML代码里存在两个
id="array"的元素,id是唯一标识,重复id会导致DOM选择异常,建议删掉其中一个重复的id避免其他功能出错。
内容的提问来源于stack exchange,提问作者mauri
相关产品推荐
相关产品推荐

