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

时间:2017-07-10 21:22:38

标签: javascript arrays multidimensional-array spread-syntax

我试图使用此函数找到每个子数组中的最大数字:

/* 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 个答案:

答案 0 :(得分:2)

您不需要第二个循环:

    /* 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]]));

答案 1 :(得分:0)

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]]));

答案 2 :(得分:0)

您也可以在Haskellesque模式匹配方式中以递归方式执行;

&#13;
&#13;
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));
&#13;
&#13;
&#13;