使用sort()正确返回数组中的最大数字

时间:2017-12-31 01:55:33

标签: javascript arrays sorting

我正在尝试使用sort()方法将每个数组中的最大数字返回到一个数组。我认为除了排序之外我正确地完成了整个代码:

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

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

我收到了一个错误:

TypeError: arr[0][j].sort is not a function

我正在尝试使用切片方法或映射到数组:

result = $.map(arr, function(value, index) { return [value]; });
result.sort().reverse();

但两种情况下的错误仍然相同。

4 个答案:

答案 0 :(得分:1)

function maxArr(arr2D) {
    let result = [];
    for(let i = 0; i < arr2D.length; i++) {
        result[i] = arr2D[i].sort((a, b) => b - a)[0];
    }
    return result;
}

答案 1 :(得分:0)

您可以使用Math.max.apply获取最大数字:

function largestOfFour(array){
   var result = [];
   for(var i=0; i<array.length;++i){
      result.push(Math.max.apply(Math, array[i]));
   }
   return result;
}

答案 2 :(得分:0)

所以,我认为对于这样的帖子,如果你提供一个输入样本和所需的输出会很有帮助。

您是否尝试将数组作为输入?然后输出一个数组,其中每个元素都有原始数组中最大的元素?我创建的示例输入如下:

var a1 = [1, 2, 3];
var a2 = [5, 19, 7];
var a3 = [199, 198, 104];
var arrs = [a1, a2, a3];
// run the function and view its output:
console.log(largestOfFour(arrs));
// outputs [ 3, 19, 199 ]

如果这就是你想要的,那么我认为你有太多的循环(一个带有不需要的内循环的外循环),所以这行代码:

let segregatedArr = arr[0][j].sort((a,b)=>b-a);

正在访问数字而不是数字数组。我按如下方式修改了函数:

function largestOfFour(arr) {
    let result=[];
    for(let i=0;i<arr.length;i++){
        let segregatedArr=arr[i].sort((a,b)=> b-a);
      result.push(segregatedArr[0])
    }
    return result;
}

因此,我删除了内部循环(使用'j'索引),然后主循环只对输入数组的第i个数组进行排序。这就是你想要的吗?

答案 3 :(得分:0)

var array = [
  [1, 2, 3, 4],
  [10, 5, 3, 4],
  [11, 20, 13, 14],
  [1, 2, 3, 40]
];

function maxVal(arr) {
  var max = arr[0];
  arr.forEach(function(item) {
    max = Math.max(item, max);
  });
  return max;
};

function largestOfFour(arr) {
  return arr.map(function(innerArray) {
    return maxVal(innerArray);
  });
}

console.log(largestOfFour(array));

或者如果你真的想要使用sort: - )

function maxVal(arr) {
  arr.sort(function(a, b) {
    if (a === b) {
      return 0;
    }
    return a > b ? -1 : 1;
  });
  return arr[0];
};

function largestOfFour(arr) {
  return arr.map(function(innerArray) {
    return maxVal(innerArray);
  });
}

console.log(largestOfFour(array));