diff --git a/packages/math/useAverage/index.ts b/packages/math/useAverage/index.ts index 7d55d9e67cb..b60fff8f5a6 100644 --- a/packages/math/useAverage/index.ts +++ b/packages/math/useAverage/index.ts @@ -1,7 +1,8 @@ import type { ComputedRef } from 'vue-demi' import { computed } from 'vue-demi' -import { resolveUnref } from '@vueuse/shared' import type { MaybeComputedRef } from '@vueuse/shared' +import type { MaybeComputedRefArgs } from '../utils' +import { resolveUnrefArgsFlat } from '../utils' export function useAverage(array: MaybeComputedRef[]>): ComputedRef export function useAverage(...args: MaybeComputedRef[]): ComputedRef @@ -11,15 +12,9 @@ export function useAverage(...args: MaybeComputedRef[]): ComputedRef { +export function useAverage(...args: MaybeComputedRefArgs): ComputedRef { return computed(() => { - const array = args - .flatMap((i) => { - const v = resolveUnref(i) - if (Array.isArray(v)) - return v.map(i => resolveUnref(i)) - return [v] - }) - return array.reduce((sum, v) => sum += v, 0) / array.length + const array = resolveUnrefArgsFlat(args) + return array.reduce((sum, v) => sum += v, 0) / array.length }) } diff --git a/packages/math/useMax/index.md b/packages/math/useMax/index.md index 010a5df9a2f..5062796a8ee 100644 --- a/packages/math/useMax/index.md +++ b/packages/math/useMax/index.md @@ -11,11 +11,15 @@ Reactive `Math.max`. ```ts import { useMax } from '@vueuse/math' -const max1 = ref(10) -const max2 = ref(20) -const result = useMax(max1, max2) -// result.value is 20 +const array = ref([1, 2, 3, 4]) +const sum = useMax(array) // Ref<4> +``` + +```ts +import { useMax } from '@vueuse/math' + +const a = ref(1) +const b = ref(3) -max1.value = 50 -// result.value is 50 now +const sum = useMax(a, b, 2) // Ref<3> ``` diff --git a/packages/math/useMax/index.ts b/packages/math/useMax/index.ts index 78b25c3694c..032fcc91c64 100644 --- a/packages/math/useMax/index.ts +++ b/packages/math/useMax/index.ts @@ -1,6 +1,11 @@ +import type { ComputedRef } from 'vue-demi' import { computed } from 'vue-demi' import type { MaybeComputedRef } from '@vueuse/shared' -import { resolveUnref } from '@vueuse/shared' +import type { MaybeComputedRefArgs } from '../utils' +import { resolveUnrefArgsFlat } from '../utils' + +export function useMax(array: MaybeComputedRef[]>): ComputedRef +export function useMax(...args: MaybeComputedRef[]): ComputedRef /** * Reactively get maximum of values. @@ -8,8 +13,9 @@ import { resolveUnref } from '@vueuse/shared' * @see https://vueuse.org/useMax * @param values */ -export function useMax(...values: MaybeComputedRef[]) { - return computed(() => - Math.max(...values.map(value => resolveUnref(value))), - ) +export function useMax(...args: MaybeComputedRefArgs) { + return computed(() => { + const array = resolveUnrefArgsFlat(args) + return Math.max(...array) + }) } diff --git a/packages/math/useSum/index.ts b/packages/math/useSum/index.ts index f2f5a748aa9..e979a9c15d3 100644 --- a/packages/math/useSum/index.ts +++ b/packages/math/useSum/index.ts @@ -1,7 +1,8 @@ import type { ComputedRef } from 'vue-demi' import { computed } from 'vue-demi' import type { MaybeComputedRef } from '@vueuse/shared' -import { resolveUnref } from '@vueuse/shared' +import type { MaybeComputedRefArgs } from '../utils' +import { resolveUnrefArgsFlat } from '../utils' export function useSum(array: MaybeComputedRef[]>): ComputedRef export function useSum(...args: MaybeComputedRef[]): ComputedRef @@ -11,14 +12,6 @@ export function useSum(...args: MaybeComputedRef[]): ComputedRef * * @see https://vueuse.org/useSum */ -export function useSum(...args: any[]): ComputedRef { - return computed(() => args - .flatMap((i) => { - const v = resolveUnref(i) - if (Array.isArray(v)) - return v.map(i => resolveUnref(i)) - return [v] - }) - .reduce((sum, v) => sum += v, 0), - ) +export function useSum(...args: MaybeComputedRefArgs): ComputedRef { + return computed(() => resolveUnrefArgsFlat(args).reduce((sum, v) => sum += v, 0)) } diff --git a/packages/math/utils.ts b/packages/math/utils.ts new file mode 100644 index 00000000000..38c6321c45d --- /dev/null +++ b/packages/math/utils.ts @@ -0,0 +1,14 @@ +import type { MaybeComputedRef } from '@vueuse/shared' +import { resolveUnref } from '@vueuse/shared' + +export type MaybeComputedRefArgs = MaybeComputedRef[] | [MaybeComputedRef[]>] + +export function resolveUnrefArgsFlat(args: MaybeComputedRefArgs): T[] { + return args + .flatMap((i: any) => { + const v = resolveUnref(i) + if (Array.isArray(v)) + return v.map(i => resolveUnref(i)) + return [v] + }) +} diff --git a/packages/shared/index.ts b/packages/shared/index.ts index 5426315dde0..9e429de4117 100644 --- a/packages/shared/index.ts +++ b/packages/shared/index.ts @@ -33,6 +33,7 @@ export * from './tryOnUnmounted' export * from './until' export * from './useArrayEvery' export * from './useArrayFilter' +export * from './useArrayFind' export * from './useArrayJoin' export * from './useArrayMap' export * from './useArrayReduce'