import { isNumber, isBoolean } from 'lodash'; export const isBetween = ([a, b]: [number, number]) => { const min = Math.min(a, b); const max = Math.max(a, b); return (value: number) => value >= min && value <= max; }; export const getMinAndMax = (a: number, b: number): [number, number] => { return [Math.min(a, b), Math.max(a, b)]; }; export const getAngleByPoint = ( end: { x: number; y: number }, start: { x: number; y: number }, ) => { const diffX = end.x - start.x, diffY = end.y - start.y; return (360 * Math.atan(diffY / diffX)) / (2 * Math.PI); }; export const getIsIncrementalArray = (array: (string | number | boolean)[]): boolean | number => { // 长度为一无法比较 if (array.length < 2) return false; // 只要有一个值不是数字则返回 if (array.some((item) => !isNumberString(item))) return false; const incremental = Number(array[1]) - Number(array[0]); for (let i = 1; i < array.length; i++) { const current = Number(array[i]); const pre = Number(array[i - 1]); if (current - pre !== incremental) return false; } return incremental; }; export const transpose2DArray = (array: T[][]) => { return array[0].map((_c, i) => { return array.map((row) => { return row[i]; }); }); }; export const isNumberString = (value: number | string | boolean) => { if (isNumber(value)) return true; if (isBoolean) return false; if (value !== null && value !== '') { return !isNaN(Number(value)); } return false; };