求数组的最⼤值和最⼩值
给定⼀个数组array求最⼤值和最⼩值:
1.⼀般做法:
算法1的主要思想是在⾃定义的min()函数和max()函数中,通过循环由第⼀个值依次与后⾯的值作⽐较,动态更新最⼤值和最⼩值,从⽽到结果
// 最⼩值
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;
};
2.借助Math对象的min()函数和max()函数
算法2的主要思想是通过apply()函数改变函数的执⾏体,将数组作为参数传递给apply()函数。这样数组就可以直接调⽤Math对象的min()函数和max()函数来获取返回值
// 最⼤值
Array.max = function(array) {
return Math.max.apply(Math, array);
};
// 最⼩值
Array.min = function(array) {
return Math.min.apply(Math, array);
};
3.优化上⾯做法:
在算法2中将min()函数和max()函数作为Array类型的静态函数,但并不⽀持链式调⽤,我们可以利⽤对象字⾯量进⾏简化。
// 最⼤值
Array.prototype.max = function() {
return Math.max.apply({}, this);
};
// 最⼩值
Array.prototype.min = function() {
return Math.min.apply({}, this);
};
上⾯的算法代码中apply()函数传⼊的第⼀个值为{},实际表⽰当前执⾏环境的全局对象。第⼆个参数this指向需要处理的数组。
由于apply()函数的特殊性,我们还可以得到其他⼏种实现⽅法。将apply()函数的第⼀个参数设置为null、undefined或{}都会得到相同的效果。
4. 借助Array类型的reduce()函数
主要思想是reduce()函数不设置initialValue初始值,将数组的第⼀个元素直接作为回调函数的第⼀个参数,依次与后⾯的值进⾏⽐较。当需要最⼤值时,每轮累加器返回当前⽐较中⼤的值;当需要最⼩值时,每轮累加器返回当前⽐较中⼩的值
// 最⼤值
Array.prototype.max = function () {
duce(function (preValue, curValue) {
return preValue > curValue ? preValue : curValue; // ⽐较后,返回⼤的值
函数prototype});
};
// 最⼩值
Array.prototype.min = function () {
duce(function (preValue, curValue) {
return preValue > curValue ? curValue : preValue; // ⽐较后,返回⼩的值
});
};
5. 借助Array类型的sort()函数
主要思想是借助数组原⽣的sort()函数对数组进⾏排序,排序完成后⾸尾元素即是数组的最⼩、最⼤元素。
默认的sort()函数在排序时是按照字母顺序排序的,数字都会按照字符串处理,例如数字11会被当作"11"处理,数字8会被当作"8"处理。在排序时是按照字符串的每⼀位进⾏⽐较的,因为"1"⽐"8"要⼩,所以"11"在排序时要⽐"8"⼩。对于数值类型的数组来说,这显然是不合理的,所以需要我们⾃定义排序函数。
var sortFn = function (a, b) {
return a - b;
};
var arr5 = [2, 4, 10, 7, 5, 8, 6];
var sortArr = arr5.sort(sortFn);
// 最⼩值
console.log(sortArr[0]); // 2
// 最⼤值
console.log(sortArr[sortArr.length - 1]); // 10
得到数组的最⼩值为“2”,最⼤值为“10”。
6.借助ES6的扩展运算符
算法6的主要思想是借助于ES6中增加的扩展运算符(...),将数组直接通过Math.min()函数与Math.max()函数的调⽤,出数组中的最⼤值和最⼩值。
根据以上的分析,得到以下的代码。
var arr6 = [2, 4, 10, 7, 5, 8, 6]
// 最⼩值
console.log(Math.min(...arr6));
// 最⼤值
console.log(Math.max(...arr6));
得到数组的最⼩值为“2”,最⼤值为“10”。
⼀共讲解了6种求数组中最⼤值和最⼩值的⽅法。实际运⽤时推荐算法3,如果追求代码的简洁,推荐算法6,不过它需要ES6提供⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论