JavaScript:数组中的最大值

JavaScript: greatest value in an array

函数只返回最大数,如果它在 first (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

逻辑错误是您将 arr[i]a 分配给 isGreat,但从未将 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]));

请注意,我更新了它以跳过循环中的第一个索引,因为 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);
}

需要将数组的第一个值取为实际最大值,从下标1开始循环。不需要 a,数组的另一个引用。

在循环内部检查 isGreat 是否小于实际值并更新 isGreat.

检查防止赋值新旧最大值的多余赋值。

function isGreater(arr) {
    let isGreat = arr[0];
    for (let i = 1; i < arr.length; i++) {
        if (isGreat < arr[i]) {
            isGreat = arr[i];
        }
    }
    return isGreat;
}

console.log(isGreater([7, 9, 10000, 11, 25, 20])); // 10000
console.log(isGreater([7, 11, 25, 2]));            //    25

你应该这样做:

function fun(){
   let arr = [7, 9, 10000, 11, 25, 20];
 let a = arr[0];
 for (let i = 0; i < arr.length; i++) {
  a = (a < arr[i]) ? arr[i] : a;
 }
 return a; //Returns 10000
}

首先,您在循环内定义了 isGreat,因此每次迭代都会重新定义它。试试这个:

function isGreater(arr){
       let greatest = arr[0];
       for(let i = 0; i < arr.length; i++){
          if(arr[i] > greatest){
            greatest = arr[i];
          }
       }
       return greatest;
}
    
console.log(isGreater([0, 4, 6, 1, 3]))

当您找到最大值时,您应该尝试将当前值与 当前最大值 进行比较,这样最大值会在迭代过程中发生变化。

这就是例子

function isGreater(arr) {
  let greatest = arr[0];
  for (let i = 1; i < arr.length; i++) {
    greatest = greatest < arr[i] ? arr[i] : greatest;
  }
  return greatest;
}

尽管您可能已经有了更好的答案,但我是这样做的:

const isGreater = arr => {
    return arr.sort((a, b) => b - a)[0];
};

这只是按降序对数组进行排序,returns 新排序的数组的第一个元素。