javascript - 创建由每个子数组的最大值组成的数组无法按预期工作

标签 javascript arrays 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]], "");

最佳答案

问题出在内部循环上,当您尝试为每个数组找到最大值时。在外循环的每次迭代中,您应该重置 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/

相关文章:

javascript - vuetify v-data-table 不显示嵌套对象数据

javascript - 正则表达式从数据中搜索和检索字符串

javascript - ActionController::UnknownFormat 在 RegistrationsController#create(设计)

python - 按索引汇总 2darray

java - 如何提供多个数组输入而不引起数组越界异常

algorithm - 检测重复的行组

javascript - 状态更改后,React-Redux 连接的组件不会更新

c - c中没有malloc的字符串数组

用于计算大量文档(例如圣经书籍)相似度的算法

c++ - 带轮分解的埃拉托色尼筛法