为什么我从Maths.max获得NaN?

时间:2016-02-23 17:12:47

标签: javascript split

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

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工作正常。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:5)

Math.max接受一系列数字或数字作为字符串(每个参数Math.max calls toNumber internally)。您的代码中不需要number.toString()

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

Math.max.apply(null, numbersArray);

或使用spread operator将数组作为参数传播。

Math.max(...numbersArray);

答案 1 :(得分:0)

期望

Math.max传递多个参数,其中每个参数都是一个数字。你传给它一个字符串。

您可能希望Math.max.apply(Math, numbers)允许您传递一组参数。

答案 2 :(得分:0)

当你拆分字符串时,我们得到一个字符串数组。我们需要使它成为一组数字。对于此用途map(Number)。然后使用以下内容。

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