You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找数组最大值的JS函数首元素为undefined/NaN时失效

解决数组最大值函数忽略非数值元素的问题

问题根源

你的函数核心问题有两个:

  1. 初始值biggest直接取数组第一个元素,若该元素是undefined、null或NaN,后续所有数值与它的比较都会返回false,导致最大值无法更新;
  2. 之前修改的判断条件仅校验了当前元素非空,但未确认它是有效数值(比如NaN属于number类型,但无法参与有效比较)。

解决方案

方法一:过滤有效数值后取最大值(简洁高效)

先过滤数组中所有符合要求的有效数值,再用内置Math.max方法获取最大值,逻辑清晰且不易出错:

const biggestNumOfArray = (array) => {
  if (!Array.isArray(array)) return NaN;
  // 仅保留类型为number且不是NaN的元素
  const validNumbers = array.filter(item => typeof item === 'number' && !isNaN(item));
  // 无有效数值返回NaN,否则返回最大值
  return validNumbers.length === 0 ? NaN : Math.max(...validNumbers);
}

测试你的示例数组[undefined, 8, 74, -22, 269.64, 92],会返回预期的269.64;若输入数组全是非数值元素(如[null, NaN, 'abc']),则返回NaN。

方法二:手动遍历优化(精细控制)

如果需要手动控制遍历过程,可以先找到第一个有效数值作为初始最大值,再遍历后续元素更新:

const biggestNumOfArray = (array) => {
  if (!Array.isArray(array)) return NaN;
  
  let biggest;
  // 先定位第一个有效数值
  for (const item of array) {
    if (typeof item === 'number' && !isNaN(item)) {
      biggest = item;
      break;
    }
  }
  
  // 无有效数值直接返回NaN
  if (typeof biggest !== 'number') return NaN;
  
  // 遍历剩余元素更新最大值
  for (let i = array.indexOf(biggest) + 1; i < array.length; i++) {
    const item = array[i];
    if (typeof item === 'number' && !isNaN(item) && item > biggest) {
      biggest = item;
    }
  }
  
  return biggest;
}

关键校验逻辑

判断一个元素是否为有效数值,必须同时满足:

  • typeof item === 'number':排除字符串、对象等非数值类型;
  • !isNaN(item):排除NaN(因为NaN的类型是number,但无法参与有效比较)。

内容的提问来源于stack exchange,提问作者danik0011

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:43:14