Javascript max在变量上返回null?
因此,我正在构建一段JavaScript代码,该代码从提供的每个子数组返回一个最大数的数组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
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;i log(最大的四个([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。