问题描述
我正在尝试从给定的数字列表中找出正确的最高成绩。
因此,当我使用此highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")
时,该函数给我6
作为maxGrade
,但应该是542
。
请检查代码并解释问题。
function highAndLow(numbers) {
var num = numbers.split(" ");
var maxGrade = num.reduce((accum,currVal) => {
if (accum > currVal) return accum;
return currVal;
});
console.log(maxGrade);
console.log(num);
}
highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")
解决方法
当您使用split()
将字符串转换为数组时,实际上您有一个array of strings
您可以使用Array.map(Number)
将字符串转换为数字
字符串值"6"
大于字符串值"542"
function highAndLow(numbers) {
var num = numbers.split(" ").map(Number);
var maxGrade = num.reduce((accum,currVal) => {
if (accum > currVal) return accum;
return currVal;
});
console.log(maxGrade);
console.log(num);
}
highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")
,
您可以拆分字符串并散布值以获取最大值。
Math.max
将参数转换为数字。
function highAndLow(numbers) {
return Math.max(...numbers.split(" "));
}
console.log(highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"));
,
您需要先转换为数字。
var num = numbers.split(" ").map(x => Number(x));
,
使用max函数:
function highAndLow(numbers) {
var num = numbers.split(" ");
var maxGrade = num.reduce((accum,currVal) => Math.max(accum,currVal));
console.log(maxGrade);
console.log(num);
}
highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")