返回最大的数组

时间:2017-10-02 08:53:48

标签: javascript arrays

我一直在努力解决这个问题:

  

返回一个数组,该数组由每个提供的子数组中的最大数字组成。为简单起见,提供的数组将包含4个子数组。

但我的代码只返回整个数组中的单个元素,如果我unshift它产生的所有最大元素完全错误的结果,我试图分别执行嵌套循环并且它工作正常但它创建了一个与外循环结合时的问题。

function largestOfFour(arr)
{
    // You can do this!
    var max = 0;
    var largestArray =[];
    for (var i = 0; i <4; i++)
    {
        for (var j = 0; j <4; j++)
        {
            if (arr[i][j]>max)
            {
              max=arr[i][j];
              largestArray.unshift(max);
              //console.log(max);
            }

        }
    }
      console.log(largestArray);
    return max;
}

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

3 个答案:

答案 0 :(得分:3)

如何修复代码(请参阅代码中的注释):

&#13;
&#13;
function largestOf(arr) {
  var max;
  var largestArray = [];

  for (var i = 0; i < arr.length; i++) { // the arr length is the number of sub arrays
    max = -Infinity; // max should be reinitialized to the lowest number on each loop
    for (var j = 0; j < arr[i].length; j++) { // the length is the number of items in the sub array
      if (arr[i][j] > max) { // just update max to a higher number
        max = arr[i][j];
      }
    }
    
    largestArray.push(max); // push max after the internal loop is done, and max is known
  }

  return largestArray; // return the largest array
}

var result = largestOf([[4, 5, 1, 13], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

console.log(result);
&#13;
&#13;
&#13;

另一个解决方案是使用Array#map,并将Math#max应用于每个子数组以获得它的最大值:

&#13;
&#13;
function largestOf(arr) {
  return arr.map(function(s) {
    return Math.max.apply(Math, s);
  });
}

var result = largestOf([[4, 5, 1, 13], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

console.log(result);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

你可以做到

function largestOfFour(arr)
{
    return arr.map(e => Math.max(...e));
}

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

console.log(result);

答案 2 :(得分:0)

希望这会有所帮助:

var pre = onload, largestOfFour; // for use on other loads
onload = function(){
if(pre)pre(); // change var pre name if using technique on other pages

function largestOfFour(arrayOfFours){
  for(var i=0,a=[],l=arrayOfFours.length; i<l; i++){
    a.push(Math.max.apply(null, arrayOfFours[i]));
  }
  return a;
}
console.log(largestOfFour([[4, 5, 1, 13], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]));

}