js获取数字数组最⼤值的⼏种⽅式
1.原⽣Math.max⽅法
Math.max⽅法不能接收数组,可以使⽤ES6的...将数组打散
const arr = [111, 12, 111, 34, 2, 5, 76];
console.log(Math.max(...arr));
也可以⽤apply⽅法调⽤
console.log(Math.max.apply(null, arr));
2.forEach遍历获取最⼤值
遍历数组,依次⽐较,保存较⼤的数,最终得到的就是最⼤值
function max2(arr) {
let result = -Infinity;
sort函数 jsarr.forEach((item) => {
if (item > result) {
result = item;
}
});
return result;
}
console.log(max2(arr));
3.sort排序获取最⼤值
将数组使⽤sort⽅法排序后,第⼀个元素或最后⼀个元素就是最⼤值,再⽤shift或者pop⽅法取出(由升序还是降序决定),值得注意的是这两个⽅法会修改原数组,可以使⽤slice⽅法复制⼀份数组再执⾏弹出元素操作
function max3(arr) {
return arr.sort((a, b) => a - b).slice().pop();
}
console.log(max3(arr));
4.filter排除⼩的值
使⽤filter函数依次取出< ⾃⾝的元素,当取不出元素即返回的函数长度=== 零时,就取得了最⼤值
(function greater(arr, idx) {
const res = arr.filter(item => item > arr[idx]);
if (res.length === 1) {
console.log(res[0]);
return res[0];
}
greater(arr, idx + 1);
})(arr, 0);
5.使⽤every判断⾃⼰是否属于最⼤值
使⽤every的原理和使⽤filter的原理类似,即当所有元素都<=本⾝的时候,本⾝就是最⼤值(function greater(arr, idx) {
if (arr.every(item => item <= arr[idx])) {
console.log(arr[idx]);
return arr[idx];
}
greater(arr, idx + 1);
})(arr, 0);
6.使⽤递归模拟数组⽅法
和上⾯两个⽅法类似,只是内层⽤了递归和IIFE模拟every
(function outer(arr, i) {
let flag = function inner(arr, j) {
if (arr[j] <= arr[i]) {
return false;
}
return arr.length < j + 1 ? inner(arr, j + 1) : true;
}(arr, 0);
if (flag) {
console.log(arr[i - 1]);
return arr[i - 1];
}
outer(arr, i + 1);
})(arr, 0);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论