Return Largest Numbers in Arrays

arry.png

题目如下:

  1. function largestOfFour(arr) {
  2. // 请把你的代码写在这里
  3. return arr;
  4. }
  5. largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

还是老规矩,先用for循环来实现需求,代码如下:
需要注意的是,下面两种写法,逻辑上都是一样的,只是在sort()方法上写法不一样,千万不要搞混了。

第一种方法:

思路是通过第一层的for循环来遍历数组;
然后通过sort()降序来将每个数组里的值从大到小,降序排列;
最后,将每个数组的第一项 push()到外部定义的空数组中,然后return 这个数组。

  1. function largestOfFour(arr) {
  2. var arr1 = [];
  3. for(var i = 0; i < arr.length; i++){
  4. var arr2 = arr[i].sort(function(m,n){ //将sort()返回的数组定义给arr2,那么,下面push()的时候
  5. return n - m; //只用写 arr2[0]
  6. });
  7. arr1.push(arr2[0]);
  8. }
  9. console.log(arr1);
  10. return arr1;
  11. }
  1. function largestOfFour(arr) {
  2. var arr1 = [];
  3. for(var i = 0; i < arr.length; i++){
  4. arr[i].sort(function(m,n){ // sort()返回的数组没有定义给其他变量,所以,在push()的时候,需要
  5. return n - m; // 写 arr[i][0]
  6. });
  7. arr1.push(arr[i][0]);
  8. }
  9. console.log(arr1);
  10. return arr1;
  11. }

第二种方法:

这种方法比上一种麻烦一点,但理解起来更容易;
采用的是循环套循环的方式,先遍历外围的大数组;
然后,将第一遍遍历出来的数组中,再遍历一边,取数组中的最大值;
这里是在第一次遍历的时候,初始化 num为0的值,是为了方便与数组中其他值比较;
但这种方式有一个很大的问题,加入传进来的数组不是二维数组,是多维数组,
那么for循环就要嵌套多层,陷入循环陷阱;所以,第二种方法要视情况来使用。

function largestOfFour(arr) {
  var arr1 = [];
  for(var i = 0; i < arr.length; i++){
    var num = 0;
    for(var k = 0; k < arr[i].length; k++){
      if(arr[i][k] > num){
        num = arr[i][k];
      }
    }
    arr1.push(num);
  }
  return arr1;
}

第三种方法:

function largestOfFour(arr) {
  // 请把你的代码写在这里
  var a=[];
  function num(a){
    var s=a[0];
    for(var i=1;i<a.length;i++){
      a[i]>s && (s=a[i]);
    }
    return s;
  }
  return arr.map(num);
}

第四种方法:

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

第五种方法:

function largestOfFour(arr) {
  return arr.map(function (arr1){
    return arr1.reduce(function (a, b) {
      return (b > a) ? b : a;
    }, 0);
  });
}

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。