javascript - 我的 Javascript for 循环适用于除一个子数组以外的所有子数组?

标签 javascript arrays

  function largestOfFour(arr) {
    var lista = [];
    var max = 0;
    for (var x = 0; x < arr.length; x++) {
      for (var y = 0; y < arr[x].length; y++){
        if (arr[x][y] > max) {
        max = arr[x][y];
        }
      lista[x] = max;
      }
    }
    return lista;
  }

 largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

^ 生成以下数组:[27,27,39,1001],但答案是:[27,5,39,1001]

我的函数正确显示每个子数组中的最大数量,除了第二个子数组。我不明白我的代码的哪一部分是错误的。

最佳答案

您从未重置max变量。您需要在外部 for 循环的每次迭代中重置它。 (如果带有 1001 的子数组是第一个子数组,则结果将是 [1001, 1001, 1001, 1001]。)

function largestOfFour(arr) {
  var lista = [];
  var max;
  for (var x = 0; x < arr.length; x++) {
    max = 0;  // <-- add this line
    for (var y = 0; y < arr[x].length; y++){
      if (arr[x][y] > max) {
        max = arr[x][y];
      }
    lista[x] = max;
    }
  }
  return lista;
}
    
console.log(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]));

顺便说一下,如果你这样做,你可以用更少的代码行来实现同样的事情:

function largestOfFour(arr) {
  return arr.map(function(a) {
    return Math.max.apply(Math,a);
  });
}

console.log(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]));

或者使用箭头函数甚至更短:

var largestOfFour = arr => arr.map(a => Math.max.apply(Math,a));

console.log(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]));

关于javascript - 我的 Javascript for 循环适用于除一个子数组以外的所有子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39059962/

相关文章:

php - 写入和提取数组

c - C 中的二维数组排序

javascript - flowtype 似乎认为 Object.keys 输出始终是字符串数组,即使它知道得更好

JavaScript 放大镜

javascript - $( ) 是 JavaScript 还是 jQuery 表示法?

按 Enter 键后 JavaScript 执行函数

javascript - 将样式转换回 CSS 默认值

arrays - 将二维数组旋转 90 度

javascript - 'this' 返回数组而不是字符串。 JavaScript

java - 安卓字符串初始化