一尘不染

创建由每个子数组的最大值组成的数组无法正常工作

algorithm

在每个子数组中找到最大的数字,然后将这些最大的数字组成一个数组。[[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]], "");

阅读 191

收藏
2020-07-28

共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](https://developer.mozilla.org/en-

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;
}
2020-07-28