From adf6060de29e48a5d92516b40a8ab1d1cbbd29ca Mon Sep 17 00:00:00 2001 From: Utopia Date: Fri, 10 May 2024 10:00:38 +0800 Subject: [PATCH] feat: improve function sum, support object item --- packages/core/src/math.test.ts | 13 +++++++++---- packages/core/src/math.ts | 16 +++++++++++----- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/core/src/math.test.ts b/packages/core/src/math.test.ts index 0581d1f..22531fe 100644 --- a/packages/core/src/math.test.ts +++ b/packages/core/src/math.test.ts @@ -1,4 +1,4 @@ -import { average, toFixedWithoutZeros, sum } from './math' +import { average, sum, toFixedWithoutZeros } from './math' describe('math functions', () => { it('toFixedWithoutZeros', () => { @@ -12,8 +12,13 @@ describe('math functions', () => { expect(average(...[])).toBe(NaN) }) it('sum', () => { - expect(sum(1, 2, 3)).toBe(6) - expect(sum(1, 2, 3, 4)).toBe(10) - expect(sum(...[])).toBe(0) + expect(sum([1, 2, 3])).toBe(6) + expect(sum([1, 2, 3, 4])).toBe(10) + expect(sum([])).toBe(0) + expect(sum([ + { value: 1 }, + { value: 2 }, + { value: 3 }, + ], item => item.value)).toBe(6) }) }) diff --git a/packages/core/src/math.ts b/packages/core/src/math.ts index 313684e..32a06b6 100644 --- a/packages/core/src/math.ts +++ b/packages/core/src/math.ts @@ -29,14 +29,20 @@ export function average(...args: number[]): number { /** * Calculates the sum of the given numbers. - * @param args - The numbers to be summed. + * @param arr - The numbers to be summed. * @returns The sum of the numbers. * @example * ```ts - * sum(1, 2, 3) // 6 - * sum(1, 2, 3, 4) // 10 + * sum([1, 2, 3]) // 6 + * sum([]) // 0 + * sum([{ value: 1 }, { value: 2 }], item => item.value) // 3 * ``` */ -export function sum(...args: number[]): number { - return args.reduce((a, b) => a + b, 0) +export function sum(arr: readonly T[]): number +export function sum( + arr: readonly T[], + fn: (item: T) => number +): number +export function sum(arr: readonly any[], fn?: (item: T) => number): number { + return (arr || []).reduce((acc, item) => acc + (fn ? fn(item) : item), 0) }