Почему моя функция reduce() не может определить правильный maxGrade?

#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")