JavaScript遍历JSON查找指定字段并分组计算对应值最小值
JavaScript按cloud分组计算指标最小值实现方案
实现步骤
- 初始化空对象作为分组容器,key为cloud取值,value为对应分组下的所有指标数值数组
- 遍历接口返回的
result数组,对每一项分别提取metric.cloud的分组名、value[1]的指标值,将字符串格式的指标值转为浮点数避免比较错误 - 检查分组容器中是否存在当前分组名对应的数组,不存在则先初始化空数组,再将转换后的指标值存入对应数组
- 遍历完成分组的容器,对每个分组的数值数组调用
Math.min计算最小值,存入结果对象即可
完整可运行代码
基于你已写的遍历逻辑修改,直接替换原有循环部分即可:
response.json().then(function (data) { const resultList = data["data"]["result"] const groupMap = {} // 遍历完成分组 for (let i = 0; i < resultList.length; i++) { const currentItem = resultList[i] const cloudName = currentItem.metric.cloud // 字符串转数值,避免字符串比较逻辑错误 const metricVal = parseFloat(currentItem.value[1]) // 初始化分组 if (!groupMap[cloudName]) { groupMap[cloudName] = [] } groupMap[cloudName].push(metricVal) } // 计算各分组最小值 const minResult = {} for (const cloud in groupMap) { minResult[cloud] = Math.min(...groupMap[cloud]) } // 输出结果,针对你给出的示例数据,输出为 {m1: 100, m2: 98.406375} console.log(minResult) })
注意事项
- 不要直接对字符串格式的数字做大小比较,字符串按字典序对比时会出现
"99" > "100"的错误结果,必须先用parseFloat转为数值类型- 3000行的JSON数据量很小,上述遍历逻辑的性能完全满足需求,不需要额外做性能优化
- 如果数据中存在无效值,可以在
push数值前增加isNaN(metricVal)判断,过滤掉异常值避免最小值计算出错
内容的提问来源于stack exchange,提问作者merry_kulal
相关产品推荐
相关产品推荐

