所以这很简单,我只需要在给定数组中找到最大值。唯一的公理是数组中的所有项目都是数字。我的问题是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)
答案 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
前面编写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);
编辑:
这是在数组中查找最大数的一种非常简单的方法:
{{1}}