ProviderFte Reduce with Lodash
Reduces the ProviderFte summary data using lodash to display the FTE and RVU listings in a single row client-side.
by Michael Perrenoud
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
JavaScript
console.clear();
var url = 'https://s3-us-west-2.amazonaws.com/jsfiddle-data/ProviderFteLodash.json';
fetch(url)
.then(res => {
res.json()
.then(data => {
const start = new Date();
const yearMonthList = _.uniq(_.map(data, 'YearMonth'));
const min = _.min(yearMonthList);
const max = _.max(yearMonthList);
const groups = _.groupBy(data, 'ReportProvFnbr');
const reduced = _.reduce(groups,
(result, value, key) => {
const reducedReportProv = _.reduce(value,
(res, val) => {
if (!res.ReportProvFnbr) {
res = _.omit(val, ['Fte', 'RvuTarget']);
}
res[`fte${val.YearMonth}`] = val.Fte;
res[`rvu${val.YearMonth}`] = val.RvuTarget;
return res;
}, {});
result.push(reducedReportProv);
return result;
}, []);
console.log('reduced', reduced);
const filtered = _.filter(reduced, o => {
const fteKeys = _.filter(_.keys(o), k => k.startsWith('fte'));
return _.every(fteKeys, k => !o[k]);
});
const stop = new Date();
console.log('reduced and filtered', filtered, `in ${stop.getTime() - start.getTime()}ms`);
});
})
.catch(err => {
alert('Failed.');
console.error(err);
});