如何合并Math.max.apply与Math.min.apply实现数值极值查询?
当然可以合并调用逻辑,还能让代码更简洁健壮!
你的需求完全可以实现,而且我们还能顺便优化代码的可读性和可靠性。先看一下优化后的方案:
方案一:一次性计算极值并合并展示
// 获取输入并转换为数字数组(显式转数字避免隐式转换的意外) const input = prompt("Enter 5 numbers : x, x, x, x, x"); const numbers = input.split(",").map(str => Number(str.trim())); // 顺便处理输入可能带的空格 // 一次性计算最大值和最小值 const max = Math.max(...numbers); const min = Math.min(...numbers); // 用一个弹窗展示两个结果,不用两次alert alert(`最大值:${max}\n最小值:${min}`);
为什么这样更好?
- 用**扩展运算符
...**代替apply,语法更直观简洁,现在ES6+已经广泛支持这种写法 - 先把输入统一转换成数字数组,只做一次转换,比原来两次
apply时重复隐式转换更高效 - 加上
trim()处理用户输入时可能带的空格(比如输入1, 2, 3这种带空格的情况),避免出现NaN的问题 - 用一个弹窗同时展示最大最小值,用户体验也更流畅
方案二:封装成可复用的函数(适合多次使用的场景)
如果你的项目里需要多次获取一组数字的极值,可以封装成小函数,逻辑更清晰:
// 封装获取极值的函数 function getMinMax(numArray) { return { min: Math.min(...numArray), max: Math.max(...numArray) }; } // 业务逻辑部分 const input = prompt("Enter 5 numbers : x, x, x, x, x"); const numbers = input.split(",").map(str => Number(str.trim())); const { min, max } = getMinMax(numbers); alert(`最小值:${min}\n最大值:${max}`);
这样以后再需要获取极值时,直接调用getMinMax就行,代码复用性拉满~
补充说明
原来的代码里,x.split(",")得到的是字符串数组,Math.max.apply(Math, x)虽然能隐式把字符串转成数字,但如果用户输入了非数字内容(比如字母、空字符),就会得到NaN,所以显式用map(Number)转换是更稳妥的做法哦。
内容的提问来源于stack exchange,提问作者Bamby
相关产品推荐
相关产品推荐

