无法在子阵列中找到最大数字

时间:2015-07-24 13:41:56

标签: javascript arrays

这是我目前的代码:

var largestNumbers = new Array(4);

function largestOfFour(arr) {
    var biggest = Math.max.apply(null, largestOfFour) 
    for (var index in arr) {
        for(var i=0; i < arr[index].length; i++){
            if (arr[index] > biggest){
                arr[index].push(largestNumbers);
            }
            else if (arr[index] < biggest) {
                arr[index].splice(0, 1);
            }
        }
    }
    return largestNumbers;
}

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

我的目标是找到每个子数组中的最大数字,然后将这些值放入另一个数组中,然后返回该值。我一直在寻找类似于&#34;如何从数组中提取子数组的内容&#34;这导致我使用拼接功能。我不确定我是否正确使用它,但我尝试了所有我得到的东西,因为我已经被困在这个问题上2天了。如果有人能引导我走上解决这个问题的道路,我将不止感激。非常感谢你们。

此外,我正在使用这个网站来引导我。有一段代码尝试解决与页面后半部分类似的问题。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

8 个答案:

答案 0 :(得分:4)

var largest = function largest(arr) {
    return arr.map(function(arr) {
        return Math.max.apply(null, arr);
    });
};

Working example

答案 1 :(得分:1)

  • 使用map通过循环第一级创建新数组。
  • 使用Math.max从数字列表中获取最大值
  • 使用apply将数组转换为Math.max
  • 中的参数

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

var myArray = [
  [4, 5, 1, 3],
  [13, 27, 18, 26],
  [32, 35, 37, 39],
  [1000, 1001, 857, 1]
];
console.log(largestOfFour(myArray));

答案 2 :(得分:1)

应用简单的嵌套循环逻辑。

function largestOfFour(arr) {

var maxArray = [];

for(var i = 0; i < arr.length; i++) {

var maxE = 0;

   for(var j = 0; j < arr.length; j++) {

      if(maxE < arr[i][j]) {

      maxE = arr[i][j];

   }

 }

   maxArray.push(maxE);

 }
  arr = maxArray;
  return arr;

 }

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

或试试这个

function largestOfFour(arr) {

var maxArray = [];


for(var i = 0; i < arr.length; i++) {

 var maxE = Math.max(...arr[i]);          // this spread is only available in ES6 so can be  replaced by --> Math.max.apply(null, arr[i])

  maxArray.push(maxE);
}

arr = maxArray;

return arr;

}


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

答案 3 :(得分:0)

只需使用简单的嵌套循环即可。找到每个内部数组的最大数字并将其添加到结果中:

Dog<?>

Here is a working example

答案 4 :(得分:0)

@QueryParam

答案 5 :(得分:0)

即使您也可以这样编码,也可以创建一个新的数组

function largestOfFour(arr) {
  // You can do this!
  var newArray=[];
  for(i=0;i<arr.length;i++){
    newArray.push(Math.max.apply(Math,arr[i]));

  }
  return newArray;
}

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

答案 6 :(得分:-1)

var largestNumbers = new Array();

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

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

答案 7 :(得分:-1)

使用Math.max.apply()的方法,您可以使用一个循环遍历数组作为参数;

function largestOfFour(arr){
   var result = [];

  for(var i = 0 ; i < arr.length ; i++){
    result[i] = Math.max.apply(null, arr[i]);
  }

  return result; 
} 

编辑: 由于@Jeff Shaver发布了simpler solution,您应该使用map函数返回结果数组。