如何找到数组中每个对象的值的平均值

问题描述

我有一个对象数组

let data = [
  { start:  {a: 1,b: 2},end: {c: 11,d: 12},avg: 100 },{ start:  {a: 3,b: 4},end: {c: 13,d: 14},avg: 200 },{ start:  {a: 5,b: 6},end: {c: 15,d: 16},avg: 300 },];

如果数组中的数据用逗号隔开,我知道如何找到平均值。

const arrAvg = data.reduce((a,b) => a + b,0) / data.length

但是我的任务是找到所有对象的平均值,并显示嵌套的开始和结束对象中的数据。 或多或少像这样:

ad and cd average: avg

解决方法

没有单行操作可以完成这项工作。 我认为以下代码将为您完成这项工作:

let data = [
      { start:  {a: 1,b: 2},end: {c: 11,d: 12},avg: 100},{ start:  {a: 3,b: 4},end: {c: 13,d: 14},avg: 200},{ start:  {a: 5,b: 6},end: {c: 15,d: 16},avg: 300},];
let out = {
  'a' : 0,'b' : 0,'c' : 0,'d' : 0,'avg' : 0}
data.forEach(row => {
  let start = Object.getOwnPropertyNames(row['start']);
  let end = Object.getOwnPropertyNames(row['end']);
  start.forEach(s => { 
    if(typeof(row['start'][s]) == "number") {
      out[s] += row['start'][s];
    }
  });

  end.forEach(e => { 
    if(typeof(row['end'][e]) == "number") {
      out[e] += row['end'][e];
    }
  });

  out['avg'] += row['avg'];
});

console.log(`start: ${out['a']/data.length} ${out['b']/data.length} end: ${out['c']/data.length} ${out['d']/data.length} average: ${out['avg']/data.length}`);