首页 > 解决方案 > 使用 JavaScript 将 var res 更改为给定数组的最大值

问题描述

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

标签: javascriptpythonfunctionscope

解决方案


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

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


推荐阅读