【问题标题】:How to make an average of nested array如何平均嵌套数组
【发布时间】:2020-05-12 08:26:42
【问题描述】:

我正在尝试制作一个更大的动态数组的平均数组。更简单的看起来像这样:

const bigArr = [[[1,1,1], [2,2,2], [3,3,3]],[[3,3,3], [4,4,4], [7,7,7]]]

最后,我希望得到:

const averageArray = [[2,2,2], [3,3,3], [5,5,5]]

我知道最好的方法是对该数组进行三次循环,但我无法获得预期的结果。

averageArray[0][0] 是 bigArr[0][0] 和 bigArr[1][0] 的平均值。

【问题讨论】:

  • 这里的平均数组是什么意思?
  • averageArray[0][0] 是 bigArr[0][0] 和 bigArr[1][0] 的平均值。
  • 为什么你的平均数组有3个子数组,而你的大数组只有两个子数组? 3 和 5 的平均值从何而来?
  • @DariuszSikorra 我的回答是否给出了您期望的输出?我是否正确解释了您的评论“averageArray[0][0] 是 bigArr[0][0] 和 bigArr[1][0] 的平均值”并将其正确扩展到其他索引? stackoverflow.com/a/61750703/9792594
  • 我真的很感激这个答案,在空数组上它的效果很好。但在回顾问题时,我发现我问错了问题。我创建了一个新问题:stackoverflow.com/questions/61794157/…

标签: javascript arrays for-loop


【解决方案1】:

有几种方法可以做到这一点(for循环、reduce等),这里我展示了一个reduce示例:

const bigArr = [
              [[1,1,1], [2,2,2], [3,3,3]],
              [[3,3,3], [4,4,4], [7,7,7]],
              //[[5,5,5], [6,6,6], [11,11,11]]
            ];

const averageArray = bigArr.reduce((aggArr, arr, i) => {
  
  if (i == 0){
    return arr.map( a => a );
  }
  else {
    arr.forEach( (a, j) => {
      a.forEach( (b, k) => {
        aggArr[j][k] = ((aggArr[j][k] * i) + b) / (i + 1)
      })     
    });
  }  
  
  return aggArr;
}, []);

console.log(averageArray);

输出:

[[2,2,2], [3,3,3], [5,5,5]]

它也适用于像这样的更大输入:

const bigArr = [
              [[1,1,1], [2,2,2], [3,3,3]],
              [[3,3,3], [4,4,4], [7,7,7]],
              [[5,5,5], [6,6,6], [11,11,11]]
            ];

我们得到这个输出:

[[3,3,3], [4,4,4], [7,7,7]]

最后一个例子:

它也适用于具有不同子数组的较大输入(以说明平均是如何发生的):

const bigArr = [
              [[1,2,3], [1,2,3], [1,2,3]],
              [[3,4,7], [3,4,7], [3,4,7]],
              [[5,6,11], [5,6,11], [5,6,11]]
            ];

我们得到这个输出:

[[3,4,7], [3,4,7], [3,4,7]]

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2017-12-11
    相关资源
    最近更新 更多