首页 > 解决方案 > JavaScript:数组中的最大值

问题描述

该函数仅在数组的第一个 (arr[0])最后一个索引 (arr[arr.length-1])时才返回最大数字。如何修复逻辑错误?

function isGreater(arr) {
 let a = arr[0];
 for (let i = 0; i < arr.length; i++) {
  var isGreat = (a < arr[i]) ? arr[i] : a;
 }
 return isGreat;
}
console.log(isGreater([7, 9, 10000, 11, 25, 20]));
// output=> 20, expected output 10000
console.log(isGreater([7, 11, 25, 2]));
// output=> 7, expected output 25

标签: javascriptarrayslogic

解决方案


逻辑错误是您将arr[i]或分配aisGreat,但从未与isGreat比较arr[i]

只是重用a而不是使用isGreat

function isGreater(arr) {
    let a = arr[0];
    for (let i = 1; i < arr.length; i++) {
        a = a < arr[i] ? arr[i] : a;
    }
    return a;
}
console.log(isGreater([7, 9, 10000, 11, 25, 20]));
console.log(isGreater([7, 11, 25, 2]));

请注意,我更新它以跳过循环中的第一个索引,因为a已经包含该值。

这一行:

a = a < arr[i] ? arr[i] : a;

如果您愿意,可以是这样:

if (a < arr[i]) {
    a = arr[i];
}

我认为这是一个练习。如果没有,您可以像这样更直接地获得结果:

// ES2015+
function isGreater(arr) {
    return Math.max(...arr);
}

或这个:

// ES5 and earlier
function isGreater(arr) {
    return Math.max.apply(Math, arr);
}

推荐阅读