为什么我的 reduce() 函数不是无法找到正确的 maxGrade?

Why my reduce() function is not unable to find out correct 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")

使用最大值函数:

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

您需要先转换为数字。

var num = numbers.split(" ").map(x => Number(x));

当你使用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"));