为什么我的reduce函数无法找出正确的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")

解决方法

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