开箱即用的十行代码

92 阅读1分钟

移除数组中所有的 falsely 值

const removeFalsely = <T>(array: T[]): T[] => arr.filter(Boolean)

Σ(求和)

const sum = (array: number[]):number => array.reduce((acc, item) => acc + item, 0)

根据键对数组进行分组

const groupBy = <T extends Record<string, any>, K extends keyof T>(arr: T[], key: K): Record<string, T[]> => (
    arr.reduce((acc, item) => ((acc[item[key]] = [...(acc[item[key]] || []), item]), acc), {} as Record<string, T[]>)
);

获取数组的平均值

const average = (array: number[]): number => arr.reduce((acc, item) => acc + item, 0) / array.length

将数值字符串转成数值

const toNumbers = (array: string[]): number[] => array.map(Number)

获取某个值在数组中出现的次数

const countOccurrences = <T>(array: T[], value: T): number => array.filter(item => item === value).length

统计数组中每个值出现的次数

这里用到了逗号运算符

const countOccurrences = <T extends string | number>(array: T[]): Record<T, number> => (
    array.reduce((prev, curr) => ((prev[curr] = ++prev[curr] || 1), prev), {} as Record<T, number>)
);

数组中的最大值的下标

// 关于最小值下标的话,把 ">" 换成 "<" 就可以了
const indexOfMax = (array: number[]): number => array.reduce((prev, curr, i, arr) => curr > a[prev] ? i : prev) , 0)

函数组合

const compose = (...fns) => x => fns.reduceRight((y, f) => f(y), x)

浅拷贝对象

const shallowCopy = (obj: object): object => Object.assign({}, obj)