使用javascript循环查找数组中最大的数字

时间:2019-02-11 03:04:21

标签: javascript arrays for-loop

创建一个名为maximumNumberInArray()的函数

以数组作为参数并返回最大数字。

这是一个数组

const array = [-1,0,3,100, 99, 2, 99]

我在JS中尝试的方式:

 function biggestNumberInArray(arr) {
   for (let i = 0; i < array.length; i++) {
      for(let j=1;j<array.length;j++){
          for(let k =2;k<array.length;k++){
              if(array[i]>array[j] && array[i]>array[k]){
                    console.log(array[i]);
           }
         }
      }
   }
}

它返回3 100 99。

我只想返回100,因为它是最大的数字。

是否有任何改进的方法可以使用循环获得最大价值?

使用三个不同的javascript循环来实现这一点(for,forEach,for,for,for in)

您可以使用其中的三个来完成

9 个答案:

答案 0 :(得分:0)

最简单的方法是使用Math.max.apply

const array = [-1,0,3,100, 99, 2, 99];

function biggestNumberInArray(arr) {
  return Math.max.apply(Math, arr);
}

console.log(biggestNumberInArray(array));

如果您真的想使用for循环,则可以使用this answer中的技术来实现:

const array = [-1,0,3,100, 99, 2, 99];

function biggestNumberInArray(arr) {
  var m = -Infinity,
    i = 0,
    n = arr.length;
  for (; i != n; ++i) {
    if (arr[i] > m) {
      m = arr[i];
    }
  }
  return m;
}

console.log(biggestNumberInArray(array));

您还可以使用reduce

const array = [-1,0,3,100, 99, 2, 99];

function biggestNumberInArray(array) {
  return array.reduce((m, c) => c > m ? c : m);
}

console.log(biggestNumberInArray(array));

答案 1 :(得分:0)

这最适合某些函数式编程并使用reduce,因为如今循环已不再受欢迎。

const max = array => array && array.length ? array.reduce((max, current) => current > max ? current : max) : undefined;

console.log(max([-1, 0, 3, 100, 99, 2, 99]));

这比Math.max https://jsperf.com/max-vs-reduce/1的性能高70%

答案 2 :(得分:0)

使用spread语法为您提供一些ES6魔术:

function biggestNumberInArray(arr) {
  const max = Math.max(...arr);
  return max;
}

实际上,有几个人以比我更详细的方式回答了这个问题,但是如果您对获取最大数量的各种方式之间的表现感到好奇,我希望您阅读this。数组。

答案 3 :(得分:0)

另一种可视化方法是创建一个名为maxNumber之类的变量,然后检查数组中的每个值,如果该值大于maxNumber,则现在maxNumber =该值。

const array = [-1,0,3,100, 99, 2, 99];

function biggestNumberInArray(arr) {
    let maxNumber;
    for(let i = 0; i < arr.length; i++){
        if(!maxNumber){ // protect against an array of values less than 0
            maxNumber = arr[i]
        }
        if(arr[i] > maxNumber){
            maxNumber = arr[i];
        }
    }
    return maxNumber
}
console.log(biggestNumberInArray(array));

我希望这会有所帮助:)

答案 4 :(得分:0)

我认为您误解了循环的使用方式-不需要三个嵌套循环。您可以通过一个循环遍历数组,跟踪变量中的最大数目,然后在循环结束时返回变量。

function largest(arr) {
var largest = arr[0]
arr.forEach(function(i) {
  if (i > largest){
    largest = i 
  }
}
return largest;
}

当然,您可以执行以下操作: Math.max(...arr) 但问题确实要求for循环实现。

答案 5 :(得分:0)

zer00ne的答案为简单起见应该更好,但如果您仍然想遵循for循环的方法,则为:

function biggestNumberInArray (arr) {
    // The largest number at first should be the first element or null for empty array
    var largest = arr[0] || null;

    // Current number, handled by the loop
    var number = null;
    for (var i = 0; i < arr.length; i++) {
        // Update current number
        number = arr[i];

        // Compares stored largest number with current number, stores the largest one
        largest = Math.max(largest, number);
    }

    return largest;
}

答案 6 :(得分:0)

有多种方法。

  1. 使用Math max函数

let array = [-1, 10, 30, 45, 5, 6, 89, 17];
console.log(Math.max(...array))

  1. 使用reduce

let array = [-1, 10, 30, 45, 5, 6, 89, 17];
console.log(array.reduce((element,max) => element > max ? element : max, 0));

  1. 实现我们自己的功能

let array = [-1, 10, 30, 45, 5, 6, 89, 17];

function getMaxOutOfAnArray(array) {
  let maxNumber = -Infinity;
  array.forEach(number => { maxNumber =  number > maxNumber ? number :  maxNumber; })
  console.log(maxNumber);
}

getMaxOutOfAnArray(array);

答案 7 :(得分:-1)

常量数组= [-1、0、3、100、99、2、99] 让最长的= Math.max(... array);

答案 8 :(得分:-1)

这个怎么样

def random_verse():
    with open(afile) as fp:
        data = json.load(fp)
        #print(data['verse'])
        questions = data['verse']
        random_index = randint(0, len(questions)-1)
        return questions[random_index]