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

如何在JavaScript中计算多维数组对应位置元素的平均值

问题描述

在JavaScript中,生成了x个均包含57个数字的数组,需要计算每个对应索引位置元素的平均值,最终得到一个由这些平均值组成的数组。计算规则如下:

  • 结果数组[0] = (array1[0] + array2[0] + ... + arrayX[0]) / 数组总数
  • 结果数组[1] = (array1[1] + array2[1] + ... + arrayX[1]) / 数组总数
  • 以此类推

以下是生成的多维数组示例:

const multiArray = [
  [4, 3, 3, 4, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 3, 5, 5, 4, 4, 4, 4, 3, 4, 3, 4, 3, 4, 4, 4, 4, 3, 4, 3, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 5, 3, 5],
  [1, 3, 1, 2, 1, 3, 2, 2, 3, 1, 2, 1, 3, 2, 3, 1, 4, 4, 4, 4, 4, 3, 1, 1, 4, 3, 3, 2, 2, 2, 4, 3, 3, 3, 3, 2, 3, 3, 3, 1, 2, 1, 1, 2, 2, 4, 1, 4, 1, 1, 3, 4, 3, 2, 1, 2, 4],
  [1, 3, 2, 4, 4, 4, 3, 4, 5, 4, 2, 4, 2, 3, 3, 4, 2, 1, 1, 2, 2, 1, 2, 3, 4, 1, 1, 1, 3, 3, 3, 3, 2, 2, 2, 4, 4, 1, 2, 3, 2, 2, 4, 3, 4, 2, 4, 4, 2, 2, 1, 2, 3, 1, 2, 1, 1],
  [2, 4, 4, 3, 2, 3, 1, 4, 3, 3, 1, 2, 1, 1, 3, 4, 4, 2, 3, 2, 2, 1, 2, 2, 4, 1, 2, 1, 1, 4, 2, 3, 3, 3, 1, 4, 1, 4, 1, 4, 4, 4, 1, 1, 3, 3, 3, 4, 1, 3, 2, 1, 4, 1, 1, 2, 4],
  [1, 1, 3, 1, 1, 2, 4, 4, 5, 1, 2, 1, 2, 2, 3, 4, 4, 2, 1, 3, 1, 2, 4, 3, 4, 4, 4, 4, 1, 3, 1, 2, 2, 4, 1, 4, 1, 3, 3, 4, 1, 3, 4, 2, 4, 1, 4, 3, 4, 1, 2, 4, 4, 1, 1, 4, 4]
];

解决方案

方法一:直观累加实现

逻辑清晰,适合新手理解,先初始化总和数组,再遍历每个子数组累加对应索引的值,最后计算平均值:

function calculateIndexAverages(multiArray) {
  // 处理空输入的边界情况
  if (!multiArray.length) return [];
  
  const arrayCount = multiArray.length;
  // 创建和子数组长度一致的总和数组,初始值为0
  const sumArray = new Array(multiArray[0].length).fill(0);
  
  // 遍历每个子数组,累加对应索引的数值
  multiArray.forEach(subArray => {
    subArray.forEach((num, index) => {
      sumArray[index] += num;
    });
  });
  
  // 计算平均值,如需保留小数可添加toFixed(例如sum / arrayCount).toFixed(2))
  return sumArray.map(sum => sum / arrayCount);
}

// 调用示例
const averages = calculateIndexAverages(multiArray);
console.log(averages);

方法二:链式reduce写法

利用reduce直接构建总和数组,代码更紧凑:

const calculateIndexAverages = (multiArray) => {
  if (!multiArray.length) return [];
  
  const arrayCount = multiArray.length;
  // 用reduce累加每个索引的总和,再映射为平均值
  return multiArray
    .reduce((sumArr, subArr) => sumArr.map((sum, idx) => sum + subArr[idx]), 
            new Array(multiArray[0].length).fill(0))
    .map(sum => sum / arrayCount);
};

// 调用示例
const averages = calculateIndexAverages(multiArray);
console.log(averages);

注意事项

  • 两种方法都处理了空数组的边界情况,避免运行时错误
  • 如果需要格式化输出的平均值(比如保留2位小数),可以在最后一步的map中修改:
    .map(sum => Number((sum / arrayCount).toFixed(2)))
    
    这里用Number将toFixed返回的字符串转回数字类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:35:23