在每个子数组中找到最大的数字,然后将这些最大的数字组成一个数组。[[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。请注意,这需要所有子数组至少有一项。
正如 @edc65 所指出的,long
的声明应该出现在函数的开头,以明确 long
作为所有局部变量都有一个函数范围。
每个子数组只需要一个值。因此,您应该为外循环的每次迭代添加一个值(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
方法
您可以使用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;
}
根据 @BillyMoon's和 @Tushar's答案,这可以进一步简化为 Array.map
打电话。
关于javascript - 创建由每个子数组的最大值组成的数组无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32679172/