#javascript #string #reduce
#javascript #строка #уменьшить
Вопрос:
Я пытаюсь найти правильный Maxgrade из заданного списка чисел. Итак, когда я использую это, 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")
Комментарии:
1. Вы сравниваете строки. Преобразуйте их в числа перед уменьшением:
numbers.split(" ").map(Number)
Ответ №1:
Когда вы используете 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")
Ответ №2:
Вы могли бы разделить строку и распределить значения, чтобы получить максимальное значение.
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"));
Ответ №3:
Сначала вам нужно преобразовать в number.
var num = numbers.split(" ").map(x => Number(x));
Ответ №4:
Используйте функцию 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")