通过 Infinity 和 -Infinity 查找数组中最大和最小值
作者:互联网
认识 Infinity
在 JavaScript 中超出 1.797693134862315E+308 的数值即为 Infinity,小于 -1.797693134862316E+308 的数值为无穷小。
出现情况
2 的指数必须在 -1023 到 1024 之间(开区间)。如果指数太小,数字会变成 0。如果指数太大,则会变成 Infinity。
Math.pow(2, 1024); // Infinity
当一个数被 0 除的时候会产生一个错误值 Infinity:
3 / 0 // Infinity
3 / -0 // -Infinity
针对于上面出现的情况,在实际开发中要排除 Infinity。全局函数 isFinite()
可以检测一个值是否是实际的值(既不是 Infinity 也不是 NaN):
isFinite(-Infinity); // false
isFinite(Infinity); // false
isFinite(NaN); // false
isFinite(55); // true
实际运用
查找最大值
在数组中查找最大值,就要比较前一个数字是否大得过第二个数字,如果大的过那就说明当前第一个是最大的,如果当前这个大不了第三个,那就说明,第三个是当前最大的,以此类推:
function findMaxNum(nums) {
let currMax = 0;
for (let i = 0; i < nums.length; i++) {
if (i + 1 > nums.length) {
return currMax;
}
if (currMax === 0) {
if (nums[i] > nums[i + 1]) {
currMax = nums[i];
}
} else {
if (nums[i] > currMax) {
currMax = nums[i];
}
}
}
return currMax;
}
这里使用的 for 语句下表取值的方式查找最大值,可以通过下标取得当前下一个元素,初始值可以设置成 max。但是,对于 for...of... 语句来说,不适用,需要用一个默认值来填充,所以-Infinity
是最合适的,因为是无穷小,比任何数字都小。
function findMaxNum(nums) {
let currMax = -Infinity;
for (let n of nums) {
if (n > currMax) {
currMax = n;
}
}
return currMax;
}
查找最小值
在数组中查找最小值,就要比较前一个数字是否小得过第二个数字,如果小的过,那么当前最小值就是它,如果小不过,当前数字就是第二个数字,以此类推:
function findMinNum(nums) {
let currMin = 0;
for (let i = 0; i < nums.length; i++) {
if (i + 1 > nums.length) {
return currMin;
}
if (currMin === 0) {
if (nums[i] < nums[i + 1]) {
currMin = nums[i];
}
} else {
if (nums[i] < currMin) {
currMin = nums[i];
}
}
}
return currMin;
}
同样的,可以跟上面一样,用更加简洁的办法来查找最小值。Infinity
代表无穷大,就是最大的数字:
function findMinNum(nums) {
let currMin = Infinity;
for (const n of nums) {
if (n < currMin) {
currMin = n;
}
}
return currMin;
}
在第三行打印当前循环的元素和 currMin,观察比较过程:
标签:currMin,Infinity,nums,currMax,最小值,查找,let,return 来源: https://www.cnblogs.com/Enziandom/p/16656581.html