在javascript中返回数组中的最大数字

时间:2016-02-16 06:27:41

标签: javascript arrays

返回一个数组,该数组由每个提供的子数组中的最大数字组成。为简单起见,提供的数组将包含4个子数组。 我得到输出[27,27,39,1001],但输出应该是[27,5,39,1001]。

function largestOfFour(arr) {
  // You can do this!
  var largest=[];
  var gr=0;
  for(var i=0;i<arr.length;i++){
    for(var j=0;j<=arr[i].length;j++){
      if(arr[i][j]>gr){
        gr=arr[i][j];

      }
    }
    largest.push(gr);
   }
 return largest;

}


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

8 个答案:

答案 0 :(得分:3)

你的逻辑是不对的。要指出错误,请参阅下文。
迭代1
- &gt; gr = 0
- &gt; 27&gt; 0?
- &gt; gr = 27
- &gt;推gr(27)

迭代2
- &gt; gr = 27
- &gt; 5> 27?
- &gt;推gr(27)

迭代3
- &gt; gr = 27
- &gt; 39&gt; 27?
- &gt; gr = 39
-push gr(39)

迭代4
- &gt; gr = 1001
- &gt; 1001&gt; 39?
- &gt; gr = 1001
- &gt;推gr(1001)

尝试使用数组参数创建一个函数,该参数获取该参数中的最大数字,而不是声明一个新的for循环。

Array.max = function( array ){
    return Math.max.apply( Math, array );
};

答案 1 :(得分:2)

您可以尝试这样的事情:

&#13;
&#13;
var data = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];
var maxArr = data.map(function(item){
  return Math.max.apply(null,item)
});

document.write(maxArr);
&#13;
&#13;
&#13;

您的代码说明:

&#13;
&#13;
function largestOfFour(arr) {
  // You can do this!
  var largest=[];
  var gr=0;
  for(var i=0;i<arr.length;i++){
    for(var j=0;j<=arr[i].length;j++){
      if(arr[i][j]>gr){
        gr=arr[i][j];
      }
    }
    largest.push(gr);
   }
 return largest;

}

var r = largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
document.write(r)
&#13;
&#13;
&#13;

您编写工作文件,但问题出在var gr=0;。这是在for loop之外初始化的,因此它将第一个数组的最大数量与第二个数字进行比较,而27>5的结果为{是假的},它只分配27个。

&#13;
&#13;
function largestOfFour(arr) {
  // You can do this!
  var largest = [];

  for (var i = 0; i < arr.length; i++) {
    var gr = 0;
    for (var j = 0; j <= arr[i].length; j++) {
      if (arr[i][j] > gr) {
        gr = arr[i][j];
      }
    }
    largest.push(gr);
  }
  return largest;

}

var r = largestOfFour([
  [13, 27, 18, 26],
  [4, 5, 1, 3],
  [32, 35, 37, 39],
  [1000, 1001, 857, 1]
]);
document.write(r)
&#13;
&#13;
&#13;

你需要为每次迭代重置gr的这个值,因此,它应该在循环内初始化。

答案 2 :(得分:2)

你的功能是对的但你需要把var gr = 0;在第一个for循环中:

 function largestOfFour(arr) {
  // You can do this!
  var largest=[];
   for(var i=0;i<arr.length;i++){
    var gr=0;
    for(var j=0;j<=arr[i].length;j++){
      if(arr[i][j]>gr){
        gr=arr[i][j];

      }
    }
    largest.push(gr);
   }
 return largest;
}

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

答案 3 :(得分:2)

try {
    List<Future<String>> resultList=executor.invokeAll(list);
    for(Future<String> f:resultList){
    //  if(f.isDone()){

                System.out.println(f.get());

        //}
    }
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}catch (ExecutionException e) {
    // TODO Auto-generated catch block
    System.out.println("HELLO SOME ERROR");
//  e.printStackTrace();
}

答案 4 :(得分:1)

尽管如此,它看起来像一个测试问题而且没有明确的问题。我将继续帮助你。

var arr = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];
var res = [];
arr.forEach(function(val, ix){
var sub = val;
var large = 0;
for(var i=0;i<sub.length;i++){
  if(sub[i] > large){
  large = sub[i];
 }
}
 res.push(large);
});

小提琴:https://jsfiddle.net/jeremyrajan/hted9eg5/

如果查看代码,我使用forEach(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)循环遍历数组并收集子数组。然后在元素中运行for循环以找到最大数字。

唯一的区别是,在我的情况下,我用它来使事情变得更漂亮。

希望有所帮助!

答案 5 :(得分:0)

这是一种更清洁的方法,但如果你关心的话它会相对缓慢。

function get_array_of_largest(rank2Array){
  var newArray = [];
  for (var i = 0; i < rank2Array.length; i ++){
    newArray.push(rank2Array[i].slice().sort(function(a, b){return a < b;})[0]);
  }
  return newArray;
}

.slice()复制数组的一部分。由于没有给出任何参数,它会复制整个事物。 .sort()根据函数对数组进行排序。鉴于我使用的函数排序,它按降序对数组进行排序(元素0因此是最大的)。

你的工作不起作用的原因是你在推动元素后没有将gr重置为0.

答案 6 :(得分:0)

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

以下函数使用Function.prototype.apply()来查找数值数组中的最大元素。 getMaxOfArray([1,2,3])等同于Math.max(1,2,3),但是你可以在任何大小的编程构造数组上使用getMaxOfArray()。

function getMaxOfArray(numArray) {
  return Math.max.apply(null, numArray);
}

答案 7 :(得分:0)

function largestOfFour(arr) {
    return arr.map(x => x.sort((a, b) => b - a)[0]);
}