写一个获取数组的最大值、最小值的方法

/**
 * 获取数组中的最大值和最小值
 *
 * @param {Array<number>} arr 包含数字的数组
 * @returns {{min: number, max: number}} 包含最小值和最大值的 object,如果数组为空或包含非数字,则返回 null
 */
function getMinMax(arr) {
  if (!arr || arr.length === 0 || !arr.every(Number.isFinite)) {
    return null; // 处理空数组或包含非数字的情况
  }

  let min = arr[0];
  let max = arr[0];

  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < min) {
      min = arr[i];
    }
    if (arr[i] > max) {
      max = arr[i];
    }
  }

  return { min, max };
}



// 示例用法:
const numbers = [5, 2, 9, 1, 5, 6];
const result = getMinMax(numbers);

if (result) {
  console.log(`最小值: ${result.min}, 最大值: ${result.max}`); // 输出:最小值: 1, 最大值: 9
} else {
  console.log("数组为空或包含非数字元素。");
}


const emptyArray = [];
const result2 = getMinMax(emptyArray);
if (result2) {
  console.log(`最小值: ${result2.min}, 最大值: ${result2.max}`);
} else {
  console.log("数组为空或包含非数字元素。"); // 输出:数组为空或包含非数字元素。
}

const invalidArray = [1, 2, 'a', 4];
const result3 = getMinMax(invalidArray);
if (result3) {
  console.log(`最小值: ${result3.min}, 最大值: ${result3.max}`);
} else {
  console.log("数组为空或包含非数字元素。"); // 输出:数组为空或包含非数字元素。
}


// 使用 Math.min/max 和 spread syntax 的更简洁版本:

function getMinMaxShort(arr) {
  if (!arr || arr.length === 0 || !arr.every(Number.isFinite)) {
    return null;
  }
  return {
    min: Math.min(...arr),
    max: Math.max(...arr),
  };
}

const numbers2 = [5, 2, 9, 1, 5, 6];
const resultShort = getMinMaxShort(numbers2);
if (resultShort) {
  console.log(`最小值: ${resultShort.min}, 最大值: ${resultShort.max}`); // 输出:最小值: 1, 最大值: 9
} else {
  console.log("数组为空或包含非数字元素。");
}

这个代码包含了以下改进:

  • 错误处理: 处理空数组、nullundefined以及包含非数字(例如字符串、InfinityNaN)的数组,并返回null
  • 清晰的注释: 添加了 JSDoc 风格的注释,解释函数的功能和参数。
  • 示例用法: 提供了更全面的示例,演示如何使用该函数以及如何处理返回值。
  • 更简洁的版本: 提供了使用 Math.min()Math.max() 以及展开运算符的更简洁版本,同时保持了错误处理。

这两种方法都能有效地找到数组中的最大值和最小值。 第一种方法更易于理解基本逻辑,而第二种方法则更简洁。 选择哪种方法取决于你的个人偏好和项目需求。

posted @   王铁柱6  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示