Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中使用Math.max.apply over数组时出现问题_Javascript_Arrays_Math_Max - Fatal编程技术网

在JavaScript中使用Math.max.apply over数组时出现问题

在JavaScript中使用Math.max.apply over数组时出现问题,javascript,arrays,math,max,Javascript,Arrays,Math,Max,我试图找到四个子数组中每个子数组的最大值,将每个最大值推送到一个包含所有四个最大值的新数组,然后返回该数组。当我运行这段代码时,它返回一个包含四个值的数组,但它们都为null。我做错了什么 largest = []; function largestOfFour(arr) { for (i = 0; arr.length > i; i++) { var tempSub = arr.slice(i , i + 1); largest.push(Math.max.appl

我试图找到四个子数组中每个子数组的最大值,将每个最大值推送到一个包含所有四个最大值的新数组,然后返回该数组。当我运行这段代码时,它返回一个包含四个值的数组,但它们都为null。我做错了什么

largest = [];

function largestOfFour(arr) {
  for (i = 0; arr.length > i; i++) {
    var tempSub = arr.slice(i , i + 1);
    largest.push(Math.max.apply(Math, tempSub));
  } 
  return largest;
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]], "");
您可以使用在每个数组上运行一个函数,以获取其最大值:

function largestOfFour(arr) {
    return arr.map(function(v){
        return Math.max.apply(Math, v);
    });
}
或者使用不是很多浏览器真正支持的浏览器:

function largestOfFour(arr) {
    return arr.map(v => Math.max.apply(Math, v));
}
您可以使用在每个数组上运行一个函数,以获取其最大值:

function largestOfFour(arr) {
    return arr.map(function(v){
        return Math.max.apply(Math, v);
    });
}
或者使用不是很多浏览器真正支持的浏览器:

function largestOfFour(arr) {
    return arr.map(v => Math.max.apply(Math, v));
}
当您使用slice获取数组的一部分时,您将获得一个包含该项的数组。变量tempSub不包含像[4,5,1,3]这样的值数组,它包含像[[4,5,1,3]]这样的值数组。当您将其发送到max方法中时,它将无法获得最大值,因为您没有将值发送到该方法中,而是发送一个数组值

使用arr[i]获取数组中的项,而不是切片

此外,还应在函数内部声明变量maximum,以便在不保留以前调用的结果的情况下多次使用该函数。变量i也应该是局部变量

函数最大四个{ var最大=[]; 对于变量i=0;i 使用arr[i]获取数组中的项,而不是切片

此外,还应在函数内部声明变量maximum,以便在不保留以前调用的结果的情况下多次使用该函数。变量i也应该是局部变量

函数最大四个{ var最大=[]; 对于变量i=0;idocument.writeJSON.stringifyresult;你的预期产出是多少?[5,27,391001]?为什么要将两个参数传递给最大四个?@Halcyon是的,这就是我想要的for@RocketHazmat第二个参数是我相信在freecodecamp上的测试。我尝试在没有它的情况下运行,但没有任何更改。这是因为LargestofForArr在其签名中只列出一个参数。您期望的输出是什么?[5,27,391001]?为什么要将两个参数传递给最大四个?@Halcyon是的,这就是我想要的for@RocketHazmat第二个参数是我相信在freecodecamp上的测试。我尝试在没有它的情况下运行,但没有任何更改。这是因为LargestofForArr在其签名中只列出了一个参数。我注意到了这一点,并尝试了类似的操作,但仍然有tempSub代码。这正是我想做的,谢谢你解释得这么清楚。我注意到了这一点,并尝试了类似的东西,但我仍然有tempSub代码在那里。这正是我想做的,谢谢你解释得这么清楚。这是一个很好的替代方法来完成我想做的事情,谢谢分享。要比我上面的基本代码更加雄辩。请注意,map方法也不是所有浏览器都支持的@古芙:没错,但我想你可以放心地假设没有人使用IE<9,不是吗?如果你真的需要支持IE8,还有一个polyfill。@RocketHazmat:你绝对不能安全地假设这一点。例如,有11%的人在使用它:其他来源有IE8的其他统计数据,但它们从来都不是零。这是一个很好的替代方法来完成我正在尝试的工作,谢谢分享。要比我上面的基本代码更加雄辩。请注意,map方法也不是所有浏览器都支持的@古芙:没错,但我想你可以放心地假设没有人使用IE<9,不是吗?如果你真的需要支持IE8,还有一个polyfill。@RocketHazmat:你绝对不能安全地假设这一点。例如,有11%的人在使用它:其他来源有IE8的其他统计数据,但它们从来都不是零。