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

JavaScript中多个数组对应索引值求平均的实现咨询

如何计算多个对象对应索引位置数字的平均值?

需求回顾

给定多个对象,每个对象包含一个numbers数组(数组元素是带number属性的对象),需要生成一个新数组,其中每个索引位置的值为所有对象对应索引位置数字的平均值。示例中索引0的值为(4+7)/2,索引1的值为(5+6)/2,同时需要支持任意数量的对象和更长的numbers数组。

解决方案

核心思路是先提取所有对象的纯数字数组,再通过reduce累加对应索引的总和,最后除以对象数量得到平均值。以下是完整代码:

// 定义你的对象(可添加任意数量的object3、object4...)
const object1 = {
    "numbers": [{ "number": 4 }, { "number": 5 }]
};

const object2 = {
    "numbers": [{ "number": 7 }, { "number": 6 }]
};

// 把所有对象放到一个数组中,方便批量处理
const allObjects = [object1, object2];

// 第一步:将每个对象的numbers数组转换为纯数字数组
const numberArrays = allObjects.map(obj => obj.numbers.map(item => item.number));

// 第二步:用reduce累加每个索引位置的总和
const sumArray = numberArrays.reduce((acc, curr) => {
    return curr.map((num, index) => (acc[index] || 0) + num);
}, []);

// 第三步:计算每个索引的平均值
const averageArray = sumArray.map(sum => sum / allObjects.length);

console.log(averageArray); // 输出: [5.5, 5.5]

逻辑解释

  1. 提取纯数字数组:通过两层map,把每个对象中嵌套的{number: x}结构转换成直接的数字,得到类似[[4,5], [7,6]]的二维数组。
  2. 累加索引总和:reduce的初始值是空数组,每次遍历当前数字数组时,对每个索引位置的值进行累加——如果acc(累加结果数组)当前索引还没有值(第一次遍历),就用0加上当前数字,确保不同长度的数组都能兼容。
  3. 计算平均值:将总和数组的每个元素除以对象的数量,得到最终的平均值数组。

扩展性说明

  • 支持更多对象:只需把新对象添加到allObjects数组中即可,比如加入object3后,代码会自动计算3个对象对应索引的平均值。
  • 支持更长的numbers数组:不管numbers数组有多少个元素,只要所有对象的numbers数组长度一致(如果长度不一致,可以额外处理,比如取最短数组的长度或补0),代码都能正确累加对应索引的值。

常见问题排查

如果你之前用reduce失败,大概率是没先处理嵌套的number属性,或者累加时没对应好索引位置。比如直接对原对象数组reduce,没有先提取纯数字,就会导致无法正确累加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:22:24