我怎样才能轻松地获得一个JavaScript数组的最小或最大元素?

伪代码示例:

let array = [100, 0, 50]

array.min() //=> 0
array.max() //=> 100

当前回答

如果你使用prototype.js框架,那么这段代码将正常工作:

arr.min();
arr.max();

这里有文档:max的Javascript原型框架

其他回答

你可以通过扩展Array类型来实现:

Array.max = function( array ){
    return Math.max.apply( Math, array );
};
Array.min = function( array ){
    return Math.min.apply( Math, array );
}; 

从这里开始(作者:John Resig)

还有一种方法:

var arrayMax = Function.prototype.apply.bind(Math.max, null);

用法:

var max = arrayMax([2, 5, 1]);

我遇到了同样的问题,我需要获得数组的最小值和最大值,令我惊讶的是,数组没有内置函数。在阅读了大量内容后,我决定亲自测试“前3个”解决方案:

离散解决方案:FOR循环检查数组中的每个元素是否符合当前的最大和/或最小值; 应用解决方案:将数组发送到Math。max和/或Math。最小内部函数使用apply(null,数组); REDUCE解决方案:使用REDUCE(函数)递归检查数组的每个元素。

测试代码是这样的:

function GetMaxDISCRETE(A)
{   var MaxX=A[0];

    for (var X=0;X<A.length;X++)
        if (MaxX<A[X])
            MaxX=A[X];

    return MaxX;
}

function GetMaxAPPLY(A)
{   return Math.max.apply(null,A);
}

function GetMaxREDUCE(A)
{   return A.reduce(function(p,c)
    {   return p>c?p:c;
    });
}

数组A由100,000个随机整数填充,每个函数在Mozilla Firefox 28.0、intel Pentium 4 2.99GHz台式机和Windows Vista上执行10,000次。时间以秒为单位,由performance.now()函数检索。结果是这样的,有3个小数位数和标准偏差:

离散解:mean=0.161s, sd=0.078 应用溶液:mean=3.571s, sd=0.487 REDUCE解:mean=0.350 0s, sd=0.044

REDUCE解决方案比离散解决方案慢117%。APPLY解决方案最差,比离散解决方案慢2,118%。此外,正如Peter所观察到的,它不适用于大型数组(大约超过1,000,000个元素)。

此外,为了完成测试,我测试了这个扩展的离散代码:

var MaxX=A[0],MinX=A[0];

for (var X=0;X<A.length;X++)
{   if (MaxX<A[X])
        MaxX=A[X];
    if (MinX>A[X])
        MinX=A[X];
}

计时:mean=0.218s, sd=0.094

因此,它比简单的离散解慢35%,但它同时检索最大值和最小值(任何其他解决方案至少需要两倍的时间来检索它们)。一旦OP需要这两个值,离散解决方案将是最佳选择(即使作为两个独立的函数,一个用于计算最大值,另一个用于计算最小值,它们也会优于第二优的REDUCE解决方案)。

让arr =[76年20日8日,29日,7日,21日,9] Math.max。应用(数学,arr);/ / 76

替代溶液

class SmallestIntegerFinder {
  findSmallestInt(args) {
    return args.reduce((min,item)=>{ return (min<item ? min : item)});
  }
}

class SmallestIntegerFinder {
  findSmallestInt(args) {
    return Math.min(...args)
  }
}

class SmallestIntegerFinder {
  findSmallestInt(args) {
    return Math.min.apply(null, args);
  }
}

class SmallestIntegerFinder {
  findSmallestInt(args) {
    args.sort(function(a, b) {
    return a - b; } )
    return args[0];
  }
}