在每个子数组中找到最大的数字,然后将这些最大的数字组成一个数组。[[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]
[[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]
我写了一些代码,但我不知道这是怎么回事。也许Array.push()方法不起作用,或者for循环。
function largestOfFour(arr) { var main = []; for(k=0;k<arr.length;k++){ var long= 0; for(i=0;i<arr[k].length;i++){ if(arr[k][i]<long) { arr[k][i] = long; } main.push[long]; } } return main } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]], "");
当您尝试找到每个数组的最大值时,问题就在内部循环上。在外循环的每次迭代中,您都应重置long = arr[k][0]。由于最大值可能小于0,因此不应将其重置为0。请注意,这期望所有子数组至少具有一项。
long = arr[k][0]
如@ edc65所指出的那样,的声明long应在函数的开始处进行,以明确表明long,作为所有局部变量,都具有函数作用域。
long
每个子数组只需要一个值。因此,您应该为外循环的每次迭代添加一个值(main.push应该在外循环中)。目前,您正在为每个子数组元素添加一个值。
main.push
在if语句中,您的分配是相反的。它应该是
long = arr[k][i];
并且条件也被反转。long存储每个子数组的最大值。因此,如果发现 大于 它的值,则更新它:
if(arr[k][i]>long) { long = arr[k][i]; }
当推入数组时,请使用括号而不是括号:
main.push(long);
括号用于调用方法。括号用于访问对象的属性。
function largestOfFour(arr) { var main = []; var long; for(k=0;k<arr.length;k++){ long = arr[k][0]; for(i=0;i<arr[k].length;i++){ if(arr[k][i]>long) { long = arr[k][i]; } } main.push(long); } return main; }
Math.max
US/docs/Web/JavaScript/Reference/Global_Objects/Math/max) 方法
您可以Math.max用来简化代码
function largestOfFour(arr) { var main = []; for(k=0;k<arr.length;k++){ var long = Math.max.apply(null, arr[k]); main.push(long); } return main; }