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

如何访问嵌套对象中的特定数组值并计算平均值?

嵌套JSON数据提取与平均值计算解决方案

需求说明

从API返回的嵌套JSON对象中,提取每个日期子对象里rates数组的第3个元素(注意数组索引从0开始,对应索引2),然后计算这些元素的平均值并返回单个数值。

示例JSON数据

{
    "2022-09-28": {
        "first": 14,
        "counts": [14,7,7],
        "rates": [1.0,0.5,0.5]
    },
    "2022-10-01": {
        "first": 572,
        "counts": [500,210,193],
        "rates": [0.8741,0.3671,0.3374]
    },
    "2022-11-01": {
        "first": 873,
        "counts": [776,327,298],
        "rates": [0.8889,0.3746,0.3414]
    }
}

你的现有代码

const nestedRates = (obj) => {
    for (const key in obj) {
      if (typeof obj[key] === 'object') {
        for (const innerKey in obj[key]) {
          if (innerKey == 'rates') {
            
          }
        }
      }
    }
  }

解决方案

你可以用Object.values()直接获取所有日期对应的子对象,再通过数组方法快速提取目标值并计算平均值,代码更简洁高效:

const calculateAverageThirdRate = (data) => {
    // 1. 把外层对象的所有子对象转为数组
    const dateObjects = Object.values(data);
    // 2. 提取每个子对象中rates数组的第3个元素(索引为2)
    const thirdRates = dateObjects.map(item => item.rates[2]);
    // 3. 累加求和后除以元素数量得到平均值,保留4位小数避免精度问题
    const average = thirdRates.reduce((sum, rate) => sum + rate, 0) / thirdRates.length;
    return parseFloat(average.toFixed(4));
}

// 调用示例
const apiData = {/* 你的API返回的JSON数据 */};
const result = calculateAverageThirdRate(apiData);
console.log(result); // 输出示例:0.3929

代码解释

  • Object.values(data):跳过外层日期key的遍历,直接获取所有日期对应的子对象数组。
  • map(item => item.rates[2]):直接定位到每个子对象的rates数组,取第3个元素。
  • reduce方法负责累加所有提取到的数值,最后除以元素个数得到平均值,toFixed(4)用来控制小数位数,避免浮点数精度误差。

如果要兼容可能存在缺失rates或数组长度不足的异常情况,可以加过滤判断:

const calculateAverageThirdRate = (data) => {
    const dateObjects = Object.values(data);
    const thirdRates = dateObjects
        .filter(item => item.rates && item.rates.length >=3) // 只保留有效数据
        .map(item => item.rates[2]);
    
    if (thirdRates.length === 0) return 0; // 处理无有效数据的情况
    
    const average = thirdRates.reduce((sum, rate) => sum + rate, 0) / thirdRates.length;
    return parseFloat(average.toFixed(4));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:12:27