mirror of
https://github.com/robonen/tools.git
synced 2026-03-20 02:44:45 +00:00
refactor: change separate tools by category
This commit is contained in:
26
core/stdlib/src/arrays/sum/index.ts
Normal file
26
core/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