UNPKG

nhb-toolbox

Version:

A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.

50 lines (49 loc) 2.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sumFieldDifference = sumFieldDifference; exports.sumByField = sumByField; exports.averageByField = averageByField; exports.groupAndSumByField = groupAndSumByField; exports.groupAndAverageByField = groupAndAverageByField; const non_primitives_1 = require("../guards/non-primitives"); const basics_1 = require("../number/basics"); const helpers_1 = require("./helpers"); const transform_1 = require("./transform"); function sumFieldDifference(data, first, second, roundTo = 2) { if (!(0, non_primitives_1.isValidArray)(data)) return 0; const total = data?.reduce((acc, item) => { return acc + ((0, helpers_1._getNumericProp)(item, first) - (0, helpers_1._getNumericProp)(item, second)); }, 0); return (0, basics_1.roundNumber)(total, roundTo); } function sumByField(data, field, roundTo = 2) { if (!(0, non_primitives_1.isValidArray)(data)) return 0; const total = data?.reduce((acc, item) => acc + (0, helpers_1._getNumericProp)(item, field), 0); return (0, basics_1.roundNumber)(total, roundTo); } function averageByField(data, field, roundTo = 2) { if (!(0, non_primitives_1.isValidArray)(data)) return 0; const total = data?.reduce((acc, item) => acc + (0, helpers_1._getNumericProp)(item, field), 0); return (0, basics_1.roundNumber)(total / data.length, roundTo); } function groupAndSumByField(data, groupBy, sumBy, roundTo = 2) { if (!(0, non_primitives_1.isValidArray)(data)) return []; const groups = (0, transform_1.splitArrayByProperty)(data, groupBy); const result = groups.map((group) => ({ [`${(0, helpers_1._resolveNestedKey)(group[0], groupBy)}`]: sumByField(group, sumBy, roundTo), })); return result; } function groupAndAverageByField(data, groupBy, averageBy, roundTo = 2) { if (!(0, non_primitives_1.isValidArray)(data)) return []; const groups = (0, transform_1.splitArrayByProperty)(data, groupBy); const result = groups.map((group) => ({ [`${(0, helpers_1._resolveNestedKey)(group[0], groupBy)}`]: averageByField(group, averageBy, roundTo), })); return result; }