UNPKG

@visactor/vmind

Version:

<div align="center"> <a href="https://github.com/VisActor#gh-light-mode-only" target="_blank"> <img alt="VisActor Logo" width="200" src="https://github.com/VisActor/.github/blob/main/profile/logo_500_200_light.svg"/> </a> <a href="https://githu

135 lines (115 loc) 4.49 kB
import { isFunction, isValidNumber } from "@visactor/vutils"; import dayjs from "dayjs"; import customParseFormat from "dayjs/plugin/customParseFormat"; dayjs.extend(customParseFormat); export const sampleSize = (array, n) => { const length = null === array ? 0 : array.length; if (!length || n < 1) return []; n = n > length ? length : n; const randIndexs = []; for (;randIndexs.length < n; ) { const rand = Math.floor(Math.random() * length); -1 === randIndexs.indexOf(rand) && randIndexs.push(rand); } return randIndexs.map((i => array[i])); }; export const uniqBy = (array, key) => { const seen = new Set; return array.filter((item => { const k = isFunction(key) ? key(item) : item[key]; return void 0 !== k && (!seen.has(k) && (seen.add(k), !0)); })); }; export const isValidData = data => null != data && "null" !== data && "" !== data; const dateFormats = [ { key: "YYYY年MM月DD日", regex: /^(\d{4})年(\d{1,2})月(\d{1,2})日$/, format: (match, year, month, day) => `${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")}` }, { key: "MM月DD日YYYY年", regex: /^(\d{1,2})月(\d{1,2})日(\d{4})年$/, format: (match, month, day, year) => `${year}-${month.padStart(2, "0")}-${year.padStart(2, "0")}` }, { key: "YYYY年MM月", regex: /^(\d{4})年(\d{1,2})月$/, format: (match, year, month) => `${year}-${month.padStart(2, "0")}` }, { key: "YYYY年", regex: /^(\d{4})年$/, format: (match, year) => `${year}` }, { key: "MM月", regex: /^(\d{1,2})月$/, format: (match, month) => `${month.padStart(2, "0")}` }, { key: "MM月DD日", regex: /^(\d{1,2})月(\d{1,2})日$/, format: (match, month, day) => `${month.padStart(2, "0")}-${day.padStart(2, "0")}` } ]; function isQuarterDate(date) { return [ /^\d{4}-Q[1-4]$/, /^\d{4}年第[一二三四]季度$/, /^Q[1-4]$/, /^\d{4}年-Q[1-4]$/ ].some((pattern => pattern.test(date))); } export function validateDate(date) { const formaterDate = `${date}`.trim(); return dayjs(formaterDate).isValid() || dateFormats.find((v => "Invalid Date" !== new Date(formaterDate.replace(v.regex, v.format)).toString())) || isQuarterDate(formaterDate); } function convertQuarterToMonth(quarter) { switch (quarter) { case "Q1": case "第一季度": return "01-01"; case "Q2": case "第二季度": return "04-01"; case "Q3": case "第三季度": return "07-01"; case "Q4": case "第四季度": return "10-01"; default: throw new Error("Invalid quarter"); } } export function convertStringToDateValue(stringDate) { const date = `${stringDate}`.trim(); if (dayjs(date).isValid()) return date; const validFormat = dateFormats.find((v => "Invalid Date" !== new Date(date.replace(v.regex, v.format)).toString())); if (validFormat && validFormat.regex.test(date)) return date.replace(validFormat.regex, validFormat.format); const patterns = [ { regex: /^(\d{4})-Q([1-4])$/, format: match => `${match[1]}-${convertQuarterToMonth("Q" + match[2])}` }, { regex: /^(\d{4})年第([一二三四])季度$/, format: match => `${match[1]}-${convertQuarterToMonth(match[2] + "季度")}` }, { regex: /^Q([1-4])$/, format: match => `${convertQuarterToMonth("Q" + match[1])}` }, { regex: /^(\d{4})年-Q([1-4])$/, format: match => `${match[1]}-${convertQuarterToMonth("Q" + match[2])}` } ]; for (const pattern of patterns) { const match = date.match(pattern.regex); if (match) return "function" == typeof pattern.format ? pattern.format(match) : date.replace(pattern.regex, pattern.format); } return date; } export function average(data, field) { let sum = 0, count = 0; data.forEach((x => { const v = field ? +x[field] : +x; isValidNumber(v) && (sum += v, count++); })); return sum / count; } export function getIntersection(array1, array2) { return array1.filter((value => array2.includes(value))); } const KNOWLEDGE_START_INDEX = 1; export const getStrFromArray = array => array.map(((item, index) => `${index + 1}. ${item}`)).join("\n"); export function findLastIndex(arr, predicate) { for (let i = arr.length - 1; i >= 0; i--) if (predicate(arr[i], i, arr)) return i; return -1; } //# sourceMappingURL=common.js.map