mirror of
https://github.com/robonen/tools.git
synced 2026-03-20 10:54:44 +00:00
feat(packages/stdlib): add sum arrays util
This commit is contained in:
39
packages/stdlib/src/arrays/sum/index.test.ts
Normal file
39
packages/stdlib/src/arrays/sum/index.test.ts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import { describe, it, expect } from 'vitest';
|
||||||
|
import { sum } from '.';
|
||||||
|
|
||||||
|
describe('sum', () => {
|
||||||
|
it('return the sum of all elements in a number array', () => {
|
||||||
|
const result = sum([1, 2, 3, 4, 5]);
|
||||||
|
expect(result).toBe(15);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('return 0 for an empty array', () => {
|
||||||
|
const result = sum([]);
|
||||||
|
expect(result).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('return the sum of all elements using a getValue function', () => {
|
||||||
|
const result = sum([{ value: 1 }, { value: 2 }, { value: 3 }], (item) => item.value);
|
||||||
|
expect(result).toBe(6);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handle arrays with negative numbers', () => {
|
||||||
|
const result = sum([-1, -2, -3, -4, -5]);
|
||||||
|
expect(result).toBe(-15);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handle arrays with mixed positive and negative numbers', () => {
|
||||||
|
const result = sum([1, -2, 3, -4, 5]);
|
||||||
|
expect(result).toBe(3);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handle arrays with floating point numbers', () => {
|
||||||
|
const result = sum([1.5, 2.5, 3.5]);
|
||||||
|
expect(result).toBe(7.5);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handle arrays with a getValue function returning floating point numbers', () => {
|
||||||
|
const result = sum([{ value: 1.5 }, { value: 2.5 }, { value: 3.5 }], (item) => item.value);
|
||||||
|
expect(result).toBe(7.5);
|
||||||
|
});
|
||||||
|
});
|
||||||
26
packages/stdlib/src/arrays/sum/index.ts
Normal file
26
packages/stdlib/src/arrays/sum/index.ts
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* @name sum
|
||||||
|
* @category Arrays
|
||||||
|
* @description Returns the sum of all the elements in an array
|
||||||
|
*
|
||||||
|
* @param {Value[]} array - The array to sum
|
||||||
|
* @param {(item: Value) => number} [getValue] - A function that returns the value to sum from each element in the array
|
||||||
|
* @returns {number} The sum of all the elements in the array
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* sum([1, 2, 3, 4, 5]) // => 15
|
||||||
|
*
|
||||||
|
* sum([{ value: 1 }, { value: 2 }, { value: 3 }], (item) => item.value) // => 6
|
||||||
|
*
|
||||||
|
* @since 0.0.3
|
||||||
|
*/
|
||||||
|
export function sum<Value extends number>(array: Value[]): number;
|
||||||
|
export function sum<Value>(array: Value[], getValue: (item: Value) => number): number;
|
||||||
|
export function sum<Value>(array: Value[], getValue?: (item: Value) => number): number {
|
||||||
|
// This check is necessary because the overload without the getValue argument
|
||||||
|
// makes tree-shaking based on argument types possible
|
||||||
|
if (!getValue)
|
||||||
|
return array.reduce((acc, item) => acc + (item as number), 0);
|
||||||
|
|
||||||
|
return array.reduce((acc, item) => acc + getValue(item), 0);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user