JavaScript:返回最大数字

时间:2015-09-09 01:50:34

标签: javascript arrays comparison

有人可以告诉我这段代码有什么问题吗?我试图从四个独立的数组中返回最大的数字。

function largestOfFour(arr) {
  var longList = [];
  for (var i in arr){
    var longest = 0;
    for (var x=0; x<i.length; x++){
      if (i[x] > longest){
        longest=i[x];
      }
      longList.push(longest);
    }
  }
  return longList;
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
编辑:Lye Fish提供了以下答案。这是新代码:

function largestOfFour(arr) {
  return arr.map(Function.apply.bind(Math.max, Math));
}

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

2 个答案:

答案 0 :(得分:3)

for(var i in arr)提供指数,因此i[x]最终为0[0]而不是arr[0][0]

使用for (var index=0; index<arr.length; index++) { i = array[index]; ... }或(除非您支持古人)Array.each,以迭代数组项目(或者更好,Array.reduce):

var arrayMax = function(arr) {
  return arr.reduce(function(a, e) { return Math.max(a, e); });
}
arrayMax(arr.map(arrayMax));
// ==> 1001

或者,更好的是:

var arrayMax = function(arr) {
  return Math.max.apply(Math, arr);
}
arrayMax(arr.map(arrayMax));
// ==> 1001
编辑:可能是我太快读了这个问题;如果你想单独列出每个子列表的最大值,Lye Fish会在评论中提供它。

答案 1 :(得分:0)

// sort function
var op = function(a, b) { return a < b};

// the input
arr2d = [[8,7,1,78,899],[8,7,1,78,198],[8,7,1,78,598],[8,7,1,78,398]]; 
// output
var result = [];
// process
arr2d.forEach(function(arr) {
   result.push(arr.sort(op)[0]); // sort and return the highest of the numbers
});