我编写了一个函数,它将接收两个数字的数组,将数组转换为列表,计算这两个数字中的最大值并返回该值。
function myFunction(arr) {
// Convert array into a list so we can use Math.max
var arrList = arr.join();
// Returning the largest item in the list
var max = Math.max(arrList);
return max;
}
console.log(myFunction([1, 4]));
它应该返回4.但我得到了NaN。
答案 0 :(得分:1)
为什么不起作用?
您的代码不起作用,因为Array#join
返回一个字符串,而Math#max
需要数字。因为它是一个字符串,结果是NaN(不是数字)。
<强>解决方案强>
如果要获取数组并将其值用作函数的参数,可以使用Function#apply
。
第一个参数是要在调用的函数中使用的this
,在这种情况下它不相关,所以我使用原始的Math
。
第二个参数是数组,它将被转换为函数参数,在本例中是数字数组。
var arr = [5, 3, 20, 15, 7];
function myFunction(arr) {
return Math.max.apply(Math, arr);
}
console.log(myFunction(arr));
使用ES6,您可以使用spread syntax ...
代替。
var arr = [5, 3, 20, 15, 7];
function myFunction(arr) {
return Math.max(...arr);
}
console.log(myFunction(arr));
答案 1 :(得分:0)
它不起作用,就像在源代码中一样。您需要使用Function#apply
作为参数数组。
function myFunction(arr) {
// Returning the largest item in the list
var max = Math.max.apply(null, arr);
return max;
}
console.log(myFunction([1, 4]));
&#13;