为什么我从数学.max得到 NaN

Why do I get NaN from Maths.max?

本文关键字:max 得到 NaN 为什么      更新时间:2023-09-26

所以我试图从以下测试用例中获取最高数字:

Test.assertEquals(highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"), "542 -214");
Test.assertEquals(highAndLow("1 -1"), "1 -1");
Test.assertEquals(highAndLow("1 1"), "1 1");

到目前为止,我有以下内容:

function highAndLow(numbers){
    var numbers;
    var str;
    numbers = numbers.split(' ');
    str = numbers.toString();
    var a = Math.max(str);
    return a;  
}

我得到NaN.我知道 .split 工作正常。有人可以帮我吗?

Math.max接受一系列数字或数字作为字符串(Math.max每个参数在内部调用toNumber)。代码中不需要number.toString()

如果要对任意数量的参数使用 Math.max,可以使用 apply

Math.max.apply(null, numbersArray);

或使用 spread 运算符将数组作为参数展开。

Math.max(...numbersArray);

Math.max期望传递多个参数,其中每个参数都是一个数字。您正在向其传递一个字符串。

您可能想要Math.max.apply(Math, numbers)它允许您传递参数数组。

当你拆分字符串时,我们得到一个字符串数组。我们需要让它成为数字数组。为此,map(Number) .然后使用以下命令。

function highAndLow(numbers){
    var numbers;
    var str;
    numbers = numbers.split(' ').map(Number);
    var a = Math.max.apply(Math, numbers);
    return a;  
}