我怎样才能轻松地获得一个JavaScript数组的最小或最大元素?
伪代码示例:
let array = [100, 0, 50]
array.min() //=> 0
array.max() //=> 100
我怎样才能轻松地获得一个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];
}
}