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])
     ...