How do I calcualte the overall average of an array like this: example array:
[[80, 90, 70], [70,80,60],[90,100,80]]
what I am trying right now
for (let i = 0; i < grades.length; i ) {
for (let y = 0; y < grades[i].length; y ) {
lastTotalScore = grades[i[y]];
lastAverageScore = lastTotalScore / grades[i].length;
overallTotalScore = lastAverageScore;
overallAverageScore = overallTotalScore / grades.length;
}
}
Thanks
CodePudding user response:
flatten
the array, and then reduce
over the elements adding them up, and then dividing by the length of the flattened array.
const arr = [
[80, 90, 70],
[70, 80, 60],
[90, 100, 80]
];
// Flatten the nested arrays
const flat = arr.flat();
// `reduce` over the numbers, and then divide
// by the number of elements in the array
const avg = flat.reduce((acc, c) => {
return acc c;
}, 0) / flat.length;
console.log(avg);
CodePudding user response:
Calculate the total from all numbers. Divide it with length of total numbers.
Working Sample
const grades = [[80, 90, 70], [70, 80, 60], [90, 100, 80]];
let lastTotalScore = 0;
let length = 0;
for (let i = 0; i < grades.length; i ) {
length = grades[i].length;
for (let y = 0; y < grades[i].length; y ) {
lastTotalScore = grades[i][y];
}
}
console.log(`Average = ${lastTotalScore / length}`);
OR
Convert the two dimentional array to a linear structure using Array.flat
and calculate its sum by looping with Array.reduce
and divide by its length.
Working Sample
const grades = [[80, 90, 70], [70, 80, 60], [90, 100, 80]];
const flatGrade = grades.flat();
const sum = flatGrade.reduce((acc, curr) => acc curr, 0);
console.log(`Average = ${sum / flatGrade.length}`);
CodePudding user response:
This would also work. Using flat and reduce.
const input = [
[80, 90, 70],
[70, 80, 60],
[90, 100, 80],
];
const { sum, count } = input.flat().reduce(
(prev, curr) => {
prev.sum = curr;
prev.count = 1;
return prev;
},
{ sum: 0, count: 0 }
);
console.log(sum / count);
CodePudding user response:
As some of the others suggested, flattening the array does the trick nicely. The only additional thing I would consider is to wrap the code into a function, which can then be reused, to keep things DRY.
const someArray = [[80, 90, 70], [70, 80, 60], [90, 100, 80]];
function getAverage(arr) {
const oneArr = arr.flat();
const avg = oneArr.reduce((sum, value) => sum = value) / oneArr.length;
return avg;
}
console.log(`The average grade is: ${getAverage(someArray)}.`);