JavaScript:数组中的最大值

Ope*_*uwa 2 javascript arrays logic

如果它是数组的第一个 (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
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

逻辑错误是,你要么分配arr[i]aisGreat,但从来没有比较isGreatarr[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]));
Run Code Online (Sandbox Code Playgroud)

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

这一行:

a = a < arr[i] ? arr[i] : a;
Run Code Online (Sandbox Code Playgroud)

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

if (a < arr[i]) {
    a = arr[i];
}
Run Code Online (Sandbox Code Playgroud)

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

// ES2015+
function isGreater(arr) {
    return Math.max(...arr);
}
Run Code Online (Sandbox Code Playgroud)

或这个:

// ES5 and earlier
function isGreater(arr) {
    return Math.max.apply(Math, arr);
}
Run Code Online (Sandbox Code Playgroud)