移除数组中所有的 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)