JavaScript:数组中的最大值

Posted

技术标签:

【中文标题】JavaScript:数组中的最大值【英文标题】:JavaScript: greatest value in an array 【发布时间】:2021-01-16 07:34:07 【问题描述】:

该函数仅在 first (arr[0])last index ( 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

【问题讨论】:

试试Math.max.apply(null, [7, 9, 10000, 11, 25, 20]) Math.max.apply(null, [7, 9, 10000, 11, 25, 20]) 但无论如何,你需要有一个变量,在循环之前设置为 0,在每个循环中设置为自身或当前数组元素中的较大者。 这能回答你的问题吗? Finding largest integer in an array in javascript 我认为使用扩展运算符比使用Function.prototype.apply 更干净。在这种情况下,Math.max(...[7, 9, 10000, 11, 25, 20]) 最终,浏览器之间的性能会有所不同,并且两者都可能导致大型数组的堆栈溢出,因此这确实是个人喜好问题。 【参考方案1】:

逻辑错误是您将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);

【讨论】:

【参考方案2】:

您需要将数组的第一个值作为实际最大值并从索引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

【讨论】:

【参考方案3】:

你应该这样做:

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

【讨论】:

【参考方案4】:

首先,您在循环内定义了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]))

【讨论】:

【参考方案5】:

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

这是一个例子

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

【讨论】:

【参考方案6】:

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

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

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

【讨论】:

以上是关于JavaScript:数组中的最大值的主要内容,如果未能解决你的问题,请参考以下文章

javascript如何获取数组中的最大值和最小值

javascript找出数组中的最大值

javascript 返回数组中的最大数字

javascript 返回数组中的最大数字

使返回数组中的最大数值,javascript [重复]

js数组