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

JavaScript如何从对象数组中获取所有数值的最大值

JavaScript对象数组提取所有数值求最大值实现方案

首先注意你的数据源特征:

  • group字段是分类名称,为非数值内容
  • Nitrogen、normal、stress三个字段存储的是字符串格式的数值,比较前必须先转成数字类型,否则字符串逐位比较ASCII码会出现逻辑错误(比如字符串比较下"9" > "12"会返回true,结果完全错误)

固定字段快速实现

如果你确定只有三个数值字段,直接提取转数字后求最大值即可,代码最简洁:

const data = [
    {
        "group": "banana",
        "Nitrogen": "12",
        "normal": "15",
        "stress": "1"
    },
    {
        "group": "poacee",
        "Nitrogen": "6",
        "normal": "6",
        "stress": "20"
    },
    {
        "group": "sorgho",
        "Nitrogen": "11",
        "normal": "28",
        "stress": "12"
    },
    {
        "group": "triticum",
        "Nitrogen": "19",
        "normal": "20",
        "stress": "12"
    }
];

const maxValue = Math.max(
  ...data.flatMap(item => [
    Number(item.Nitrogen),
    Number(item.normal),
    Number(item.stress)
  ])
);

console.log(maxValue); // 输出结果28,和示例预期一致

通用适配实现

如果后续可能新增数值字段,不想每次改硬编码的字段名,可以写通用逻辑自动过滤非数值内容:

// 提取所有可转成数字的字段值
const allValidNumbers = data.flatMap(item => 
  Object.values(item)
    .map(val => Number(val))
    .filter(num => !isNaN(num)) // 过滤掉分类名这类转数字后为NaN的内容
);
const maxValue = Math.max(...allValidNumbers);

超大数据量兼容写法

如果你的数据集规模极大(万元素以上),展开运算符传参可能触发栈溢出,可以用reduce遍历逐次比较最大值,性能更稳定:

const maxValue = data.reduce((currentMax, item) => {
  const currentItemNums = Object.values(item)
    .map(v => Number(v))
    .filter(n => !isNaN(n));
  const currentItemMax = Math.max(...currentItemNums);
  return currentItemMax > currentMax ? currentItemMax : currentMax;
}, 0);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:42:26