/** * table-core * * Copyright (c) TanStack * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */ 'use strict'; var utils = require('./utils.js'); const sum = (columnId, _leafRows, childRows) => { // It's faster to just add the aggregations together instead of // process leaf nodes individually return childRows.reduce((sum, next) => { const nextValue = next.getValue(columnId); return sum + (typeof nextValue === 'number' ? nextValue : 0); }, 0); }; const min = (columnId, _leafRows, childRows) => { let min; childRows.forEach(row => { const value = row.getValue(columnId); if (value != null && (min > value || min === undefined && value >= value)) { min = value; } }); return min; }; const max = (columnId, _leafRows, childRows) => { let max; childRows.forEach(row => { const value = row.getValue(columnId); if (value != null && (max < value || max === undefined && value >= value)) { max = value; } }); return max; }; const extent = (columnId, _leafRows, childRows) => { let min; let max; childRows.forEach(row => { const value = row.getValue(columnId); if (value != null) { if (min === undefined) { if (value >= value) min = max = value; } else { if (min > value) min = value; if (max < value) max = value; } } }); return [min, max]; }; const mean = (columnId, leafRows) => { let count = 0; let sum = 0; leafRows.forEach(row => { let value = row.getValue(columnId); if (value != null && (value = +value) >= value) { ++count, sum += value; } }); if (count) return sum / count; return; }; const median = (columnId, leafRows) => { if (!leafRows.length) { return; } const values = leafRows.map(row => row.getValue(columnId)); if (!utils.isNumberArray(values)) { return; } if (values.length === 1) { return values[0]; } const mid = Math.floor(values.length / 2); const nums = values.sort((a, b) => a - b); return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2; }; const unique = (columnId, leafRows) => { return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values()); }; const uniqueCount = (columnId, leafRows) => { return new Set(leafRows.map(d => d.getValue(columnId))).size; }; const count = (_columnId, leafRows) => { return leafRows.length; }; const aggregationFns = { sum, min, max, extent, mean, median, unique, uniqueCount, count }; exports.aggregationFns = aggregationFns; //# sourceMappingURL=aggregationFns.js.map