繁体   English   中英

如何获取每个数组的最大数?

[英]How to get the largest number of each array?

挑战在于给出这样一个子数组的数组:

[[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
  }

提前致谢!

您的代码中的问题是您在内循环中初始化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]

您可以使用map来实现:

let array = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];
let max_elements = array.map(el => Math.max(...el));

这是可行的,因为您正在展开Math.max function 中的每个子数组,这将找到其所有参数的最大值

 var arr = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]] console.log(largestOfFour(arr)); function largestOfFour(arr) { const result = []; for(let i = 0; i < arr.length; i++){ var highestNumber = 0; for(let a = 0; a < arr[i].length; a ++){ if(arr[i][a] > highestNumber){ highestNumber = arr[i][a]; } } result.push(highestNumber) highestNumber = 0; } return result }

这应该在第二个 for 循环之外。

var highestNumber = 0;

或者.. 你可以通过使用 Math.max 和 map 每个元素来做简单的方法

 let arr = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]; let result = arr.map(eachInnerArr => Math.max(...eachInnerArr)); console.log(result)

您的代码不起作用的原因是因为highestNumber在循环内。 因此在每次迭代中,通过将 0 分配给它来丢弃先前的值,因此您应该将highestNumber变量移到循环之外

 arr=[[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]] var highestNumber = 0; function largestOfFour(arr) { const result = []; for(let i = 0; i < arr.length; i++){ for(let a = 0; a < arr[i].length; a ++){ if(arr[i][a] > highestNumber){ highestNumber = arr[i][a]; } } result.push(highestNumber) highestNumber = 0; } return result } console.log(largestOfFour(arr))

或者,有一种更简单、更容易的方法可以使用Math.max来做同样的事情

 let array = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]; let mxel = array.map(el => Math.max(...el)); console.log(mxel)

               var arr = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];
               var result = [];
               for (var i=0; i < arr.length; i++){
                   result.push(Math.max(...arr[i]));
               }
               console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM