使用JavaScript将var res更改为给定数组的最大值

时间:2019-04-03 11:29:37

标签: javascript python function scope

所以这很简单,我只需要在给定数组中找到最大值。唯一的公理是数组中的所有项目都是数字。我的问题是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 个答案:

答案 0 :(得分:1)

您的循环永远不会在这种情况下工作:

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]))

答案 1 :(得分:0)

您有一些错误,我已经对它们发表了评论。首先,您需要在循环中的var前面编写ii,如果您不这样做,则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);

编辑:

这是在数组中查找最大数的一种非常简单的方法:

{{1}}