本文汇总了JavaScript中获取数组最大值和最小值的几种常见方法。包括通过原型链手动遍历比较、利用Math.max/min结合apply方法传递参数,以及针对多维数组的扁平化处理技巧。文章提供了完整的代码示例与注意事项,帮助开发者根据实际需求选择最优方案。
JavaScript数组求最值方法概述
在JavaScript开发中,比较数组内数值的大小是一项基础且高频的操作。实现这一目标的方式多样,例如可以使用内置的排序函数,下文将详细介绍几种具体的实现路径及其代码示例。
基于原型链的手动遍历实现
第一种方法:
//最小值
Array.prototype.min = function() {
var min = this[0];
var len = this.length;
for (var i = 1; i < len; i++){
if (this[i] < min){
min = this[i];
}
}
return min;
}
//最大值
Array.prototype.max = function() {
var max = this[0];
var len = this.length;
for (var i = 1; i < len; i++){
if (this[i] > max) {
max = this[i];
}
}
return max;
}
若开发环境引入了第三方类库,需警惕类库可能已实现了同名的原型方法。为避免冲突,可在定义函数前增加重名检测逻辑:
if (typeof Array.prototype['max'] == 'undefined') {
Array.prototype.max = function() {
... ...
}
}
利用Math对象与apply方法
第二种方法:
利用Math.max和Math.min函数能快速获取结果。apply方法允许指定函数的调用对象及参数数组,这正是利用Math对象处理数组参数的关键所在。
Array.max = function( array ){
return Math.max.apply( Math, array );
};
Array.min = function( array ){
return Math.min.apply( Math, array );
};
值得注意的是,John Resig将其封装为Math对象的静态方法,这导致无法使用链式调用。不过,既然Math本身也是对象,我们可以利用对象字面量语法进一步精简代码:
Array.prototype.max = function(){
return Math.max.apply({},this)
}
Array.prototype.min = function(){
return Math.min.apply({},this)
}
[1,2,3].max()// => 3
[1,2,3].min()// => 1
其他实现方式与多维数组处理
第三种方法:
function getMaximin(arr,maximin)
{
if(maximin=="max")
{
return Math.max.apply(Math,arr);
}
else if(maximin=="min")
{
return Math.min.apply(Math, arr);
}
}
var a=[3,2,4,2,10];
var b=[12,4,45,786,9,78];
console.log(getMaximin(a,"max"));//10
console.log(getMaximin(b,"min"));//04
第四种方法:
var a=[1,2,3,5];
alert(Math.max.apply(null, a));//最大值
alert(Math.min.apply(null, a));//最小值
对于多维数组,可以通过以下方式进行修改处理:
var a=[1,2,3,[5,6],[1,4,8]];
var ta=a.join(",").split(",");//转化为一维数组
alert(Math.max.apply(null,ta));//最大值
alert(Math.min.apply(null,ta));//最小值
以上分享了JavaScript获取数组最大值和最小值的多种方法,希望这些内容能对读者有所帮助。