Javascript 返回数组中的最大数

Javascript 返回数组中的最大数,javascript,arrays,sorting,Javascript,Arrays,Sorting,我试图在一组数组中找到最大的数,并将它们返回到新数组中。但是我不明白为什么我的代码不起作用。你能解释一下我的错误吗 函数最大四(arr){ 对于(变量i=0;i

我试图在一组数组中找到最大的数,并将它们返回到新数组中。但是我不明白为什么我的代码不起作用。你能解释一下我的错误吗

函数最大四(arr){
对于(变量i=0;i]);如果您希望从所有数组中获得最大的n值,则可以展开列表、排序,然后瞧

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

for (var _i = 0, arrayOfArrys_1 = arrayOfArrys; _i < arrayOfArrys_1.length; _i++) {
    var arr = arrayOfArrys_1[_i];
    flattened = flattened.concat(arr);
}

var sorted = flattened.sort(function (a, b) {
    return b - a;
});

alert(JSON.stringify(sorted));
var arrayOfArrys=[[4,5,1,3]、[13,27,18,26]、[32,35,37,39]、[10001001857,1];
var=[];
对于(var_i=0,arrayOfArrys_1=arrayOfArrys;_i
如果您要查找总和最大的数组(因为您说您想要的是最大的“数字”而不是“数字”),可以执行以下操作:

function largestOfFour(arr) {
  var sums = [];
  for(var i = 0; i < arr.length; i++){
      var arraySum = 0;
      for(var j = 0; j < arr[i].length; j++){
        arraySum+=arr[i][j];
      }
      sums.push({array: arr[i], sum: arraySum});
   }
   return sums.sort(function(a,b){return b.sum - a.sum})[0].array;
}
函数最大四(arr){
var总和=[];
对于(变量i=0;i
实现基本功能的第一步重构包括使用提取最大值:

function largestOfFour(arr) {
  for (var i = 0; i < arr.length; i++) {
    for (var j = 0; j < arr[i].length; j++) {
      arr[i].sort(function(a, b) {
        return b - a;
      });

    }
  }

  // Extract the first element from each array.
  return arr.map(function(a) { return a[0] });
}

这一步是执行数字排序所需的丑陋的
排序(函数(a,b){…})
垃圾。

您的代码有很多问题

  • 您在循环遍历内部数组时对其进行排序,这意味着对于大小为
    n
    的数组,您将对该数组进行排序
    n
    次。这是毫无必要的低效
  • 如果只需要max/min元素,则排序效率很低;排序通常是一个O(n log n)操作,但仅通过数组循环是O(n)(有关更多信息,请参阅)
  • 尽管您的代码正在对内部数组进行排序,但您并没有对结果(即排序后的内部数组的第一个元素)进行任何处理
  • 您没有从函数返回任何内容,也没有修改输入数组以包含结果(如果目的是将数组“就地”修改为返回值)
要解决这些问题:

函数最大四(arr){
var结果=[],最大值,jMax;
对于(变量i=0;i);“不工作”是什么意思?你有错误吗?你的输出不是你所期望的吗?你在循环中排序
arr[i]
j
,这有什么意义?那只会执行相同的排序操作好几次。不工作是一个毫无意义的问题描述。如果你想在这里得到帮助,请具体说明。它是如何工作的,具体来说它是如何工作的?你想要的实际结果是什么?准确一点,不要让可能的解释来解释。我假设您想要
[5,27,391001]
作为结果?然后在外部数组上循环一次,在内部对当前内部数组进行排序,然后从中选择最大值(第一个或最后一个,取决于排序顺序),并将其放入新数组中。很抱歉,未提供信息。我确信我的代码有很多问题。我认为它会起作用,但它没有。(没有输出)我可以使用预先制作的解决方案来通过这一课。我只是想知道这个有什么问题。是的,我希望每个数组中的数字都最大。
function largestOfFour(arr) {
  return arr.map(function(a) {
    return Math.max.apply(null, a);
  });
}