JavaScript中可用Object.values()提取对象属性值,经map(Number)转数字并filter过滤NaN后,用Math.max()和Math.min()配合展开运算符计算极值;空数组或含非数值得提前校验,封装函数可复用。

JavaScript 中可以通过 Object.values() 提取对象所有属性值,再配合数组的数学方法(如 Math.max() 和 Math.min())快速计算最大值和最小值。
提取值并转为数字数组
注意:Object.values() 返回的是原始值数组,如果对象值是字符串数字(如 "12")、布尔值或 null 等,需显式转换为数字,否则 Math.max() 可能返回 NaN 或错误结果。
- 用
map(Number)安全转数字(会把"12"→12,"abc"→NaN) - 过滤掉非数字项可加
.filter(v => typeof v === 'number' && !isNaN(v)) - 示例:
const nums = Object.values(obj).map(Number).filter(n => !isNaN(n));
直接计算最大最小值
得到纯数字数组后,可用展开运算符传入 Math.max() 和 Math.min():
const max = Math.max(...nums);const min = Math.min(...nums);- 若数组为空,两者均返回
-Infinity和+Infinity,建议提前校验长度
处理常见边界情况
实际使用中容易忽略这些细节:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- 对象为空时
Object.values({})返回空数组,后续展开会报错或得-Infinity,应先判断nums.length > 0 - 值含
undefined、null或对象时,Number()转为NaN,需过滤 - 若只要原始值中的极值(不转数字),可先用
JSON.stringify或自定义比较逻辑,但通常统计场景以数值为准
封装成可复用函数
把逻辑收拢便于多次调用:
function getMinMax(obj) {
const nums = Object.values(obj)
.map(Number)
.filter(n => typeof n === 'number' && !isNaN(n));
if (nums.length === 0) return { max: null, min: null };
return {
max: Math.max(...nums),
min: Math.min(...nums)
};
}
调用:getMinMax({ a: 5, b: "12", c: 3.7, d: null }) → { max: 12, min: 3.7 }

















