写一个获取数组的最大值、最小值的方法
/**
* 获取数组中的最大值和最小值
*
* @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("数组为空或包含非数字元素。");
}
这个代码包含了以下改进:
- 错误处理: 处理空数组、
null
、undefined
以及包含非数字(例如字符串、Infinity
、NaN
)的数组,并返回null
。 - 清晰的注释: 添加了 JSDoc 风格的注释,解释函数的功能和参数。
- 示例用法: 提供了更全面的示例,演示如何使用该函数以及如何处理返回值。
- 更简洁的版本: 提供了使用
Math.min()
和Math.max()
以及展开运算符的更简洁版本,同时保持了错误处理。
这两种方法都能有效地找到数组中的最大值和最小值。 第一种方法更易于理解基本逻辑,而第二种方法则更简洁。 选择哪种方法取决于你的个人偏好和项目需求。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?