calcAverage
from Stack Question
by trentHarlem
JavaScript
const bills = [
[], 4, 42, 9, "error"
];
const moreBills = [[3, 15], 4, 42, 9, "error", []]
const evenMoreBills = [[3, [15,69]], 4, 42, 9, "error", []]
const filtered = [3, 15, 4, 42, 9]
const expected = filtered.reduce((a, c, i, arr) => a + c / arr.length, 0)
const expected2 = moreBills.flat(2).filter(item => typeof(item) === 'number').reduce((a, c, i, arr) => a + c / arr.length, 0)
//const expected2 = filtered.reduce((a, c, i, arr) => a + c / i, 0)
console.log('expected',expected)
console.log('expected2',expected2)
//console.log(expected2)
//console.log('maths', (4 + 42 + 9) / 3)
console.log('maths', (3 + 15 + 4 + 42 + 9) / 5)
console.log('maths-flat', (3+15+69+4+42+9)/6)
const calcAverage = arr => arr.filter(item => typeof(item) === 'number').reduce((a, c, i, arr) => a + c / arr.length, 0)
console.log('new', calcAverage(bills))
const calcAverageFlat = arr => arr.flat(2).filter(item => typeof(item) === 'number').reduce((a, c, i, arr) => a + c / arr.length, 0)
console.log('new-flattened', calcAverageFlat(evenMoreBills))
// OP's
/*
const calcAverage = function(arr) {
let sum = 0;
let avg;
for (let i = 0; i < arr.length; i++) {
if (typeof arr[i] === "number") {
sum = sum + arr[i];
avg = sum / arr.length
} else {
const newArr = arr.filter(arr => typeof arr[i] === "number");
for (let b = 0; b < newArr.length; b++) {
sum = sum + newArr[b];
avg = sum / newArr.length;
}
}
}
return avg;
} */
// OP FIXED
/* const calcAverageOLD = function(arr) {
let sum = 0;
let avg;
const newArr = arr.filter(primitive => typeof(primitive) === "number");
//const newArr = arr.filter(arr => typeof arr[i] === "number");
console.log(newArr)
for (let i = 0; i < newArr.length; i++) {
if (typeof arr[i] === "number") {
sum = sum + arr[i];
avg = sum / arr.length
} else {
//for (let b = 0; b < newArr.length; b++) {
sum += newArr[i];
console.log(sum,newArr[i])
...