一、通过 排序 后的数组拿取首尾最大最小值
1.原始 for嵌套循环
进行排序
var arr = [54,23,58,44,76,12,39]
function sortArr1(arr){
for(var i=0; i<arr.length-1;i++){
for(var j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
return arr
}
console.log(sortArr1(arr))
// ---输出1--- [12, 23, 39, 44, 54, 58, 76] ---输出1--- //
2.使用 Array.prototype.sort()
方法排序
var arr = [54,23,58,44,76,12,39]
function sortArr2(arr){
return arr.sort((a,b) => {
return a-b
})
}
console.log(sortArr2(arr))
// ---输出2--- [12, 23, 39, 44, 54, 58, 76] ---输出2--- //
二、通过 比较 数组值找出最大最小值
1.使用 for循环
比较找出最大最小值
var arr = [54,23,58,44,76,12,39]
function compareArr1(arr){
var num=0;
for(var i=0; i<arr.length; i++){
if(arr[i]>num){
num=arr[i];
}
}
return num
}
console.log(compareArr1(arr))
// ---输出1--- 76 ---输出1--- //
2.使用 Array.prototype.reduce
比较最大最小值
var arr = [54,23,58,44,76,12,39]
function compareArr2(arr){
return arr.reduce(function(init,item){
return init >= item ? item : init
})
}
console.log(compareArr2(arr))
// ---输出2--- 12 ---输出2--- //
三、使用 Math.max()/Math.min() 找出数组中的最大最小值
JavaScript 提供了 Math.max 函数 返回一组数中的最大值,用法是:
Math.max([value1[,value2, ...]])
值得注意的是:
- 如果有任一参数不能被转换为数值,则结果为
NaN
。 max
是Math
的静态方法,所以应该像这样使用:Math.max()
,而不是作为Math
实例的方法 (简单的来说,就是不使用new
)- 如果没有参数,则结果为
-Infinity
(注意是负无穷大)
因此,如果给 Math.max
传一个非数值,结果是 NaN
:
var arr = [54,23,58,44,76,12,39]
Math.max(arr) // NaN
1.使用 apply
更改为目标对象的this上下文指向
var arr = [54,23,58,44,76,12,39]
Math.max.apply(null,arr) // 76
Math.min.apply(Math,arr) // 12
题外话,apply目标对象传了null得到的指向是哪里?
① 首先传入的第一个参数都是改变函数当前上下文对象;
② call/apply
区别在于传的参数不同,一个是已逗号分隔字符串,一个以数组形式。
居然得到的是 window
,当前js运行环境的全局对象。
这其实在es5中就有解释的:传入 null/undefined
的时候将执行js全局对象浏览器中是window
,其他环境是 global
,这样就解释得通了
2.使用 es6扩展运算符
取代 arguments对象
和 apply方法
,获取未知参数个数情况下的参数集合
var arr = [54,23,58,44,76,12,39]
Math.max(...arr) // 76
Math.min(...arr) // 12