ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

通过 Infinity 和 -Infinity 查找数组中最大和最小值

2022-09-05 01:31:33  阅读:176  来源: 互联网

标签:currMin Infinity nums currMax 最小值 查找 let return


认识 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,观察比较过程:

image

标签:currMin,Infinity,nums,currMax,最小值,查找,let,return
来源: https://www.cnblogs.com/Enziandom/p/16656581.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有