将两个项目的数组转换为一个列表并返回最高值

时间:2016-12-14 16:36:46

标签: javascript

我编写了一个函数,它将接收两个数字的数组,将数组转换为列表,计算这两个数字中的最大值并返回该值。

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。

2 个答案:

答案 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作为参数数组。

&#13;
&#13;
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;
&#13;
&#13;