js中数组取最大值和最小值

本文介绍了三种使用JavaScript实现数组最大值和最小值的方法,包括直接遍历数组、利用Math对象和封装函数。每种方法都有其特点,适用于不同的场景。

方法一:

//为了防止同名的原型方法,可以在生成函数之前进行重名判断
if (typeof Array.prototype['max'] == 'undefined') { 
    //最小值
	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;
	}
}

方法二:

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

Math.max(x....)

参数描述
x0 或多个值。在 ECMASCript v3 之前,该方法只有两个参数。

方法三:

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"));//4

此方法类似于第二种方法,用的也是Math,但这种相当于把去取最小值和最大值封装在一个函数里了,通过传参数是max还是min来判定函数返回的是最小值和最大值。

 

 

### 使用 JavaScript 查找数组中的最大值最小值 在 JavaScript 中,查找数组最大值最小值的方法多种多样,具体选择决于实际需求性能考量。 #### 1. 使用 `Math.max()` `Math.min()` 配合 `apply()` JavaScript 的 `Math` 对象提供了 `Math.max()` `Math.min()` 方法,可以用于查找一组数值中的最大值最小值。为了将其应用于数组,可以结合 `Function.prototype.apply()` 方法: ```javascript var arr = [3, 7, 2, 1]; var max = Math.max.apply(null, arr); // 7 var min = Math.min.apply(null, arr); // 1 ``` 这种方法简洁且易于实现,适用于大多数基本场景[^1]。 #### 2. 使用 `reduce()` 方法 `Array.prototype.reduce()` 提供了一种函数式编程风格的方式来遍历数组并累积结果。可以分别使用 `reduce()` 来查找最大值最小值: ```javascript var arr = [3, 7, 2, 1]; var max = arr.reduce((acc, val) => Math.max(acc, val), -Infinity); // 7 var min = arr.reduce((acc, val) => Math.min(acc, val), Infinity); // 1 ``` 这种方法允许更灵活的逻辑处理,例如在查找过程中添加额外的判断条件[^2]。 #### 3. 使用 `sort()` 方法 通过对数组进行排序,最大值最小值分别位于数组的末尾开头: ```javascript var arr = [3, 7, 2, 1]; arr.sort((a, b) => a - b); var min = arr[0]; // 1 var max = arr[arr.length - 1]; // 7 ``` 虽然这种方法实现简单,但时间复杂度较高(O(n log n)),在处理大规模数据时效率较低[^3]。 #### 4. 线性扫描法(遍历数组) 通过一次遍历即可同时找出最大值最小值,适用于对性能有较高要求的场景: ```javascript var arr = [3, 7, 2, 1]; var max = arr[0], min = arr[0]; for (var i = 1; i < arr.length; i++) { if (arr[i] > max) max = arr[i]; if (arr[i] < min) min = arr[i]; } // max = 7, min = 1 ``` 此方法时间复杂度为 O(n),在实际应用中通常比排序法更高效[^4]。 #### 5. 成对比较法 为了进一步优化比较次数,可以将数组中的元素两两分组,每组进行比较,较小的数当前最小值比较,较大的数当前最大值比较: ```javascript var arr = [3, 7, 2, 1]; var max = -Infinity, min = Infinity; for (var i = 0; i < arr.length; i += 2) { var a = arr[i], b = arr[i + 1] !== undefined ? arr[i + 1] : a; if (a < b) { if (a < min) min = a; if (b > max) max = b; } else { if (b < min) min = b; if (a > max) max = a; } } // max = 7, min = 1 ``` 这种方法减少了比较次数,适用于大规模数据处理场景[^3]。 ### 总结 JavaScript 提供了多种方法用于查找数组中的最大值最小值,每种方法各有优劣。`Math.max()` `Math.min()` 适用于快速查找;`reduce()` 提供了更高的灵活性;排序法适用于需要排序的场景;线性扫描法成对比较法则在性能要求较高的情况下表现更佳。根据具体需求选择合适的方法可以提高代码效率可维护性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值