首页 > 解决方案 > 如何获得每个数组的最大数量?

问题描述

挑战在于提供一组像这样的子数组:

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

预期的结果应该是[27, 5, 39, 1001]这个例子。

它希望我返回每个数组的最大数量。我尝试了以下解决方案。如果有人告诉它有什么问题,我将不胜感激。


function largestOfFour(arr) {
    const result = [];
    for(let i = 0; i < arr.length; i++){
      

      for(let a = 0; a < arr[i].length; a ++){
        var highestNumber = 0;
        if(arr[i][a] > highestNumber){
          highestNumber = arr[i][a];
        }
      }
      result.push(highestNumber)
      highestNumber = 0;
    }
    return result
  }

提前致谢!

标签: javascriptarrays

解决方案


您的代码中的问题是您highestNumber在内部循环中初始化的地方。这意味着您的最大值会为内部数组中的每个元素重置。

相反,您应该在内部循环之外对其进行初始化。

如果要处理负值,还应该初始化highestNumber为可能的最低负值,而不是0.

function largestOfFour(arr) {
    const result = [];
    for(let i = 0; i < arr.length; i++){
      

        var highestNumber = Number.MIN_SAFE_INTEGER; // <-- initialize here to lowest possible value
      for(let a = 0; a < arr[i].length; a ++){
        // var highestNumber = 0; // <-- move this up

        if(arr[i][a] > highestNumber){
          highestNumber = arr[i][a];
        }
      }
      result.push(highestNumber)
      highestNumber = 0;
    }
    return result
  }
  
  let arrays = [ [17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10] ];
  
  console.log(largestOfFour(arrays))

使用更少代码的解决方案是用来Math.max为您节省一些输入:

let arrays = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];

let result = arrays.map(arr => Math.max(...arr));

console.log(result); // [27, 5, 39, 1001]


推荐阅读