replay-table
Version:
Visualize sport seasons with interactive standings
48 lines (37 loc) • 1.71 kB
JavaScript
import calculatables from '../calculations';
import getItems from '../../helpers/data/get-items';
export default function (transformedData, params) {
const calculations = Object.keys(calculatables)
.filter(calc => calculatables[calc].check(transformedData));
const items = getItems(transformedData);
const initialStats = calculations.reduce((obj, calc) => Object.assign(obj, { [calc]: 0 }), {});
const itemStats = items.reduce((obj, item) => Object.assign(obj, { [item]: Object.assign({}, initialStats) }), {});
return transformedData.map(round => {
const results = round.results.map(result => {
const calculatedResult = Object.assign({}, result);
const stats = itemStats[result.item];
calculations.filter(calc => !calculatables[calc].isPost)
.forEach(calc => {
const change = calculatables[calc].calculate(calculatedResult);
calculatedResult[calc] = {
change: change,
total: stats[calc] + change
};
stats[calc] += change;
});
calculations.filter(calc => calculatables[calc].isPost)
.forEach(calc => {
const total = calculatables[calc].calculate(calculatedResult);
calculatedResult[calc] = {
change: null,
total: total
}
});
return calculatedResult;
});
return {
name: round.name,
results: results
}
});
};