Изменение var res на максимальное значение заданного массива с помощью JavaScript - PullRequest
1 голос
/ 03 апреля 2019

Так что это просто, мне нужно только найти максимальное значение в данном массиве. Единственная аксиома в том, что все элементы в массиве будут числами. Моя проблема в том, что переменная res не меняется. Я попробовал то же самое в Python, и он работает без проблем, но в JavaScript кажется, что значение не меняется или больше - поэтому оно изменяется только для if и затем возвращается к своему первоначальному значению.

Итак, я попытался поиграться с ключевым словом var, я попытался поместить var в разные позиции кода (вне цикла for, в цикле for, в операторе if). Я попытался сделать это без переменной var. ключевое слово, но оно по-прежнему не работает

     function max(arr){    
        var res = 0;
    for (i=1; i>arr.length; i++){

        if (arr[i-1]>arr[i]){
          res = arr[i-1]
        }

        else if (arr[i-1]<arr[i]){
           res = arr[i]
        }
    }
    for (i=0; i<arr.length; i++){
        if (res<arr[i]){
            res = arr[i]
        }
    }
    console.log(res)
}

Это код Python, который работает

def Max(arr):
  res = 0
  for i in range(1,len(arr)):
    if arr[i-1]>arr[i]:
      res = arr[i-1]
    elif arr[i-1]<arr[i]:
      res = arr[i]
  for i in range(len(arr)):
    if res<arr[i]:
      res = arr[i]

  print(res)

Если мы возьмем, что arr будет [1,2,3,7,5,6], результат должен быть 7 (что я получаю в Python), но в JavaScript я получаю 0 или что я установил res, чтобы быть (например, если res был установлен в 10, то будет также console.log 10)

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Ваш цикл никогда не работает с этим условием:

i > arr.length

потому что я начинаю с 1 и это только true с пустым массивом.

лучший подход с одной петлей и одной проверкой.

function max(array) {
    var max = array[0],
        i;
        
    for (i = 1; i < array.length; i++) {
        if (array[i] > max) max = array[i];
    }
    
    return max;
}

console.log(max([1, 2, 3, 7, 5, 6]))
0 голосов
/ 03 апреля 2019

У вас есть ошибки, я их прокомментировал.Сначала вам нужно написать let или var перед i в циклах, если вы этого не сделаете, i станет глобальной переменной.Вы можете прочитать о переменных области видимости блока.Ваш второй цикл не имеет смысла, так как вам нужно проверить, меньше ли i arr.length;

function max(arr){    
    var res = 0;
    for (let i=1; i>arr.length; i++){ // let i

        if (arr[i-1]>arr[i]){
          res = arr[i-1]
        }

        else if (arr[i-1]<arr[i]){
           res = arr[i]
        }
    }
    // without let, 'i' would be a global variable equal to arr.length-1 here and your second loop wouldn't execute.
    for (let i=0; i < arr.length; i++){ // let i; i< arr.length; 
        if (res<arr[i]){
            res = arr[i]
        }
    }
    console.log(res)
}

max([2,3,4,5,10,1])

РЕДАКТИРОВАТЬ:

И вот действительно простой способ найти наибольшее число в массиве:

let maxNumber = Math.max(...[1,2,3,4,5,10,255,1]);
console.log(maxNumber);
...