如何访问嵌套对象中的特定数组值并计算平均值?
嵌套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
相关产品推荐
相关产品推荐

