Javascript max在变量上返回null?

Javascript max在变量上返回null?,javascript,arrays,math,Javascript,Arrays,Math,因此,我正在构建一段JavaScript代码,该代码从提供的每个子数组返回一个最大数的数组 function largestOfFour(arr) { var array = []; for (i = 0; i < arr.length; i++) { // return arr[i].join() on this line gives 4,5,1,3 array.push(Math.max(arr[i].join())); } return array; } largestOfFour

因此,我正在构建一段JavaScript代码,该代码从提供的每个子数组返回一个最大数的数组

function largestOfFour(arr) {
var array = [];
for (i = 0; i < arr.length; i++) {
// return arr[i].join() on this line gives 4,5,1,3
array.push(Math.max(arr[i].join()));
}
return array;
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
函数最大四(arr){
var数组=[];
对于(i=0;i
我的问题是为什么:
Math.max(arr[i].join())
返回一个
空值

如果我回来
arr[i].join()
在前一行(如代码注释中),它返回给我
4,5,1,3
进行第一次迭代。如果我输入
Math.max(4,5,1,3)
它返回
5
,这就是我想要的

arr[i].join()赋值给变量,然后放入
Math.max
也会返回
null
。我会通过reduce函数运行
Math.max
,但它不会让我通过循环运行函数

我确信这不起作用的原因很简单,但我在任何地方都找不到解释。我不需要帮助来解决整个问题,只需要帮助理解为什么
Math.max
不起作用。

Math.max(4,5,1,3)
Math.max('4,5,1,3')
是两个非常不同的操作。传递包含逗号分隔值的字符串与传递多个参数不同:

函数foo(x,y,z){ console.log('x',x); 控制台日志('y',y); console.log('z',z); } foo(1,2,3); foo('1,2,3');
foo([1,2,3].join())如文件中所述,并在注释中提及:

join()方法将数组(或类似数组的对象)的所有元素连接到一个字符串中

因此,删除
join
并重写
max
,如下所示:

函数最大四(arr){
var数组=[];
对于(i=0;ilog(最大的四个([4,5,1,3],[13,27,18,26],[32,35,37,39],[10001001857,1])如果要将数组与math max一起使用,问题是max需要参数列表。所以我们用apply来做

var arr=[1,4,5,9]
var max=数学最大应用(数学,arr);
控制台日志(最大值)
函数最大值(arr){
var数组=[];
对于(变量i=0;iMath.max

给定数字中最大的一个。如果至少有一个参数无法转换为数字,则返回NaN

如果您实际观察函数中的
数组
变量,您将在循环末尾看到
[NaN,NaN,NaN,NaN]
。这表示至少有一个参数无法转换为数字。如果您只检查
Math.max
函数的一个输入,您就会看到出了什么问题

//随机数组
变量a=[1,2,3,4];
//连接
console.log(a.join());//"1,2,3,4"
//尝试将联接转换为数字
console.log(编号(a.join());//楠
//尝试从连接中获取最大值。你的案子在这里

console.log(Math.max(a.join());//NaN
谢谢,这很有道理。感谢所有的回答和解释。谢谢,这些是我将应用的解决方案。谢谢,我最初尝试过这个解决方案,但我的控制台没有运行必要的ES6。