代码之家  ›  专栏  ›  技术社区  ›  Daniel Rodríguez

使用扩展语法返回数组中的最大数

  •  1
  • Daniel Rodríguez  · 技术社区  · 7 年前

    /* jshint esversion: 6 */
    function largestOfFour(arr) {
      var max=[];
      for(var i=0; i<arr.length; i++){
        for(var j=0; j<arr[i].length; j++){
    
         max.push(Math.max(...arr[j]));
        }
    
      }
      return max;
    
    }
    
    largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
    

    但当我运行它时,结果实际上是每个子阵列中的最大数字,但重复了4次,如下所示:

    [27,5,39,1001,27,5,39,1001,27,5,39,1001,27,5,39,1001]
    

    我不知道为什么。我想知道我做错了什么,谢谢。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Scott Marcus    7 年前

    您不需要第二个循环:

        /* jshint esversion: 6 */
        function largestOfFour(arr) {
          var max=[];
          for(var i=0; i<arr.length; i++){
             max.push(Math.max(...arr[i]));
          }
          return max;
        }
        
        console.log(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]));
        2
  •  0
  •   Ori Drori    7 年前

    Array#map

    function largestOfFour(arr) {
      return arr.map((sub) => Math.max(...sub));
    }
    
    console.log(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]));
        3
  •  0
  •   Redu    7 年前

    您还可以以Haskellesque模式匹配方式递归地执行以下操作:;

    function getLargests([x,...xs]){
      return [Math.max(...x)].concat(xs.length ? getLargests(xs) : []);
    }
    
    var arr = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];
    console.log(getLargests(arr));