问题描述
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}`);