From 384dcc3108b691fcc0d44f09685600b90257177a Mon Sep 17 00:00:00 2001 From: colgin Date: Sun, 10 Jul 2022 15:22:32 +0800 Subject: [PATCH 1/5] feat(useAverage): add new function --- packages/math/useAverage/index.md | 16 ++++++++ packages/math/useAverage/index.test.ts | 55 ++++++++++++++++++++++++++ packages/math/useAverage/index.ts | 16 ++++++++ 3 files changed, 87 insertions(+) create mode 100644 packages/math/useAverage/index.md create mode 100644 packages/math/useAverage/index.test.ts create mode 100644 packages/math/useAverage/index.ts diff --git a/packages/math/useAverage/index.md b/packages/math/useAverage/index.md new file mode 100644 index 00000000000..ee1c877d540 --- /dev/null +++ b/packages/math/useAverage/index.md @@ -0,0 +1,16 @@ +--- +category: '@Math' +--- + +# useAverage + +Get the average value of a branch of numbers + +## Usage + +```ts +import { useAverage } from '@vueuse/math' + +const list = ref([1, 2, 3]) +const averageValue = useAverage(list) +``` diff --git a/packages/math/useAverage/index.test.ts b/packages/math/useAverage/index.test.ts new file mode 100644 index 00000000000..977f683b8b0 --- /dev/null +++ b/packages/math/useAverage/index.test.ts @@ -0,0 +1,55 @@ +import { ref } from 'vue-demi' +import { useAverage } from '.' + +describe('useAverage', () => { + it('should be defined', () => { + expect(useAverage).toBeDefined() + }) + + it('should be the average', () => { + const arr = ref([1, 2, 3]) + + const v = useAverage(arr) + + expect(v.value).toBe(2) + + arr.value = [4, 5, 6] + expect(v.value).toBe(5) + }) + + it('should be the average when some are ref', () => { + const a = ref(2) + const arr = ref([1, a, 9]) + + const v = useAverage(arr) + + expect(v.value).toBe(4) + + a.value = 8 + expect(v.value).toBe(6) + }) + + it('should be the average when some items are getter', () => { + const a = ref(1) + const arr = ref([1, () => a.value + 1, 9]) + + const v = useAverage(arr) + + expect(v.value).toBe(4) + + a.value = 7 + expect(v.value).toBe(6) + }) + + it('should be the average when the array is a getter', () => { + const arr = ref([1, 2, 3]) + const last = ref(0) + + const v = useAverage(() => arr.value.concat(last.value)) + + expect(v.value).toBe(1.5) + + last.value = 10 + expect(v.value).toBe(4) + }) +}) diff --git a/packages/math/useAverage/index.ts b/packages/math/useAverage/index.ts new file mode 100644 index 00000000000..9a262175821 --- /dev/null +++ b/packages/math/useAverage/index.ts @@ -0,0 +1,16 @@ +import type { ComputedRef } from 'vue-demi' +import { computed } from 'vue-demi' +import { resolveUnref } from '@vueuse/shared' +import type { MaybeComputedRef } from '@vueuse/shared' + +/** + * Reactively average value of a list + * @param arr list + * @returns + */ +export function useAverage(arr: MaybeComputedRef>>): ComputedRef { + return computed(() => { + const originalArr = resolveUnref(arr) + return originalArr.reduce((sum, v) => sum += resolveUnref(v), 0) / originalArr.length + }) +} From 30555b6473f430df592f64ea83b99c4b2b8af5f1 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Sun, 10 Jul 2022 15:28:30 +0800 Subject: [PATCH 2/5] Update packages/math/useAverage/index.md --- packages/math/useAverage/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/math/useAverage/index.md b/packages/math/useAverage/index.md index ee1c877d540..dfc0c3d99f8 100644 --- a/packages/math/useAverage/index.md +++ b/packages/math/useAverage/index.md @@ -4,7 +4,7 @@ category: '@Math' # useAverage -Get the average value of a branch of numbers +Get the average value of an array of numbers ## Usage From 48e07d3efd6340c36dcc6aa9477d174801123d9b Mon Sep 17 00:00:00 2001 From: colgin Date: Sun, 10 Jul 2022 15:31:04 +0800 Subject: [PATCH 3/5] doc(useAverage): doc --- packages/math/useAverage/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/math/useAverage/index.md b/packages/math/useAverage/index.md index ee1c877d540..dfc0c3d99f8 100644 --- a/packages/math/useAverage/index.md +++ b/packages/math/useAverage/index.md @@ -4,7 +4,7 @@ category: '@Math' # useAverage -Get the average value of a branch of numbers +Get the average value of an array of numbers ## Usage From 86ba0d3ed0f8b028b141086bdea7852a5ed9053c Mon Sep 17 00:00:00 2001 From: colgin Date: Sun, 10 Jul 2022 16:08:39 +0800 Subject: [PATCH 4/5] fix(useAverage): add exports --- packages/math/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/math/index.ts b/packages/math/index.ts index 45c960ae080..094ced0449e 100644 --- a/packages/math/index.ts +++ b/packages/math/index.ts @@ -1,5 +1,6 @@ export * from './logicAnd' export * from './logicNot' export * from './logicOr' +export * from './useAverage' export * from './useClamp' export * from './useProjection' From 5c5126e400112e09c464168501404876f8b0d7fa Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Sun, 10 Jul 2022 17:19:39 +0800 Subject: [PATCH 5/5] chore: update --- packages/math/useAverage/index.md | 2 +- packages/math/useAverage/index.ts | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/math/useAverage/index.md b/packages/math/useAverage/index.md index dfc0c3d99f8..05cb0262b3e 100644 --- a/packages/math/useAverage/index.md +++ b/packages/math/useAverage/index.md @@ -4,7 +4,7 @@ category: '@Math' # useAverage -Get the average value of an array of numbers +Get the average of an array reactively. ## Usage diff --git a/packages/math/useAverage/index.ts b/packages/math/useAverage/index.ts index 9a262175821..7bc647edc32 100644 --- a/packages/math/useAverage/index.ts +++ b/packages/math/useAverage/index.ts @@ -4,13 +4,13 @@ import { resolveUnref } from '@vueuse/shared' import type { MaybeComputedRef } from '@vueuse/shared' /** - * Reactively average value of a list - * @param arr list - * @returns + * Get the average of an array reactively + * + * @see https://vueuse.org/useAverage */ -export function useAverage(arr: MaybeComputedRef>>): ComputedRef { +export function useAverage(array: MaybeComputedRef[]>): ComputedRef { return computed(() => { - const originalArr = resolveUnref(arr) - return originalArr.reduce((sum, v) => sum += resolveUnref(v), 0) / originalArr.length + const arr = resolveUnref(array) + return arr.reduce((sum, v) => sum += resolveUnref(v), 0) / arr.length }) }