首页 > 解决方案 > 如何找到数组中每个对象的平均值

问题描述

我有一个对象数组

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

标签: javascriptarraysobjectreduce

解决方案


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

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}`);

推荐阅读