lightview
Version:
A reactive UI library with features of Bau, Juris, and HTMX plus safe LLM UI generation
35 lines (30 loc) • 1.08 kB
JavaScript
/**
* cdom CONDITIONAL AGGREGATE HELPERS
*/
export const sumIf = (arr, predicate) => {
if (!Array.isArray(arr)) return 0;
const filtered = (predicate && predicate.isLazy)
? arr.filter(item => predicate.resolve(item))
: arr;
return filtered.reduce((a, b) => a + (Number(b) || 0), 0);
};
export const countIf = (arr, predicate) => {
if (!Array.isArray(arr)) return 0;
if (predicate && predicate.isLazy) {
return arr.filter(item => predicate.resolve(item)).length;
}
return arr.filter(item => !!item).length;
};
export const avgIf = (arr, predicate) => {
if (!Array.isArray(arr)) return 0;
const filtered = (predicate && predicate.isLazy)
? arr.filter(item => predicate.resolve(item))
: arr;
if (filtered.length === 0) return 0;
return filtered.reduce((a, b) => a + (Number(b) || 0), 0) / filtered.length;
};
export const registerConditionalHelpers = (register) => {
register('sumIf', sumIf);
register('countIf', countIf);
register('avgIf', avgIf);
};