系列文章
题目
老规矩,先看题:

大致意思就是,返回输入的字符串中中的最大值和最小值。
这里还有一些提示:
- 所有数值都是有效的
Int32,无需验证 - 输入字符中至少存在一个数字
- 输出的格式应该是:
"max min"
解析
这道题的思路很简单:
- Step1:将字符串转化成数组,再将数组中的元素转化成数值
- Step2:将数组按从大到小排序
- Step3:返回数组的首位和末尾
直接按照思路实现代码即可:
function highAndLow(numbers) {
const arr = numbers.split(" ").map(Number).sort((a, b) => a - b)
return `${arr.pop()} ${arr[0]}`
}
乍一看好像没什么问题,但假如我们输入的值只有一个数值的时候会怎么样呢?

显然,是因为 pop 将值弹出去了,所以后面的 arr[0] 只能取到 undefined,这个时候有两种解决方案:
- 先取
arr[0],后取pop - 将
pop换成arr[arr.length - 1]
另外,因为需求里输出格式为 max min,所以这里如果我们想按第一种方式来解决的话,应该更改排序的顺序:
function highAndLow(numbers) {
const arr = numbers.split(" ").map(Number).sort((a, b) => b - a)
return `${arr[0]} ${arr.pop()}`
}
其他思路
我们来看看大佬有没有别的更加惊艳的实现思路呢?
function highAndLow(numbers){
numbers = numbers.split(' ');
return `${Math.max(...numbers)} ${Math.min(...numbers)}`;
}
利用了 Math 方法,可以不用遍历数组将其每个元素转化成数字,也不用对数组进行排序了。
function highAndLow(numbers){
numbers = numbers.split(' ').map(Number);
return Math.max.apply(0, numbers) + ' ' + Math.min.apply(0, numbers);
}
同样是利用了 Math 方法,看来这个方法很值得了解一下。