SO answer: How to calculate numbers within an array of objects

Link to question in output

by KooiInc MeHere

HTML

<script src="https://kooiinc.github.io/JSHelpers/Helpers-min.js"></script>
<div class="solink" data-linkid="57534742"></div>

<pre id="result"></pre>

JavaScript

const log = (() => {
	const result = document.querySelector("#result");
  return x => result.textContent += typeof x === "object" ? `${JSON.stringify(x, null, " ")}\n` : `${x}\n`;
})();
const valueOrZero = (value, replacement = 0) => !isNaN(+value) ? +value : replacement;
const sumAll = arr => 
	arr
  	.reduce( (sum, v) =>
  		sum + Object.values(v)
    				.reduce( (localSum, v) => localSum + valueOrZero(v), 0 ), 0 );
const calcSums = someArray => someArray
  .reduce( (sums, val) => {
    Object.keys(val)
      .forEach( v => 
      		sums[`∑[${v}]`] = !(`∑[${v}]` in sums)
        		       ? valueOrZero(val[v])  
                   : sums[`∑[${v}]`] + valueOrZero(val[v]) );
    return sums;
  }, {} );
  
let someArray = [{a: 1}, {a: 2}, {a: 3}, {b: 4}, {b: 5}];
log("\nDefault")
log(calcSums(someArray));

someArray = someArray.concat([{a:3, c:7, d:8, b:-1}, {a:22}]);
log("\nMore key-(numeric)value combinations")
log(calcSums(someArray));

log("\nNone number values count as 0")
someArray = someArray.concat([{hi: "there", c:33, b:2, a:-22}]);
log(calcSums(someArray));

log("\nCheck 'sum-hi' ;)");
someArray = someArray.concat([{hi: 123, c:33, b:2, a:2, some:{a:1, b:2}}]);
log(calcSums(someArray));

log("\nGrand total for numeric values in [someArray]");
log(`∑ Numbers in [someArray] = ${sumAll(someArray)}`);