@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
152 lines (127 loc) • 5.31 kB
JavaScript
;
var __importDefault = this && this.__importDefault || function(mod) {
return mod && mod.__esModule ? mod : {
default: mod
};
};
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.findLastIndex = exports.getStrFromArray = exports.getIntersection = exports.average = exports.convertStringToDateValue = exports.validateDate = exports.isValidData = exports.uniqBy = exports.sampleSize = void 0;
const vutils_1 = require("@visactor/vutils"), dayjs_1 = __importDefault(require("dayjs")), customParseFormat_1 = __importDefault(require("dayjs/plugin/customParseFormat"));
dayjs_1.default.extend(customParseFormat_1.default);
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]));
};
exports.sampleSize = sampleSize;
const uniqBy = (array, key) => {
const seen = new Set;
return array.filter((item => {
const k = (0, vutils_1.isFunction)(key) ? key(item) : item[key];
return void 0 !== k && (!seen.has(k) && (seen.add(k), !0));
}));
};
exports.uniqBy = uniqBy;
const isValidData = data => null != data && "null" !== data && "" !== data;
exports.isValidData = isValidData;
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)));
}
function validateDate(date) {
const formaterDate = `${date}`.trim();
return (0, dayjs_1.default)(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");
}
}
function convertStringToDateValue(stringDate) {
const date = `${stringDate}`.trim();
if ((0, dayjs_1.default)(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;
}
function average(data, field) {
let sum = 0, count = 0;
data.forEach((x => {
const v = field ? +x[field] : +x;
(0, vutils_1.isValidNumber)(v) && (sum += v, count++);
}));
return sum / count;
}
function getIntersection(array1, array2) {
return array1.filter((value => array2.includes(value)));
}
exports.validateDate = validateDate, exports.convertStringToDateValue = convertStringToDateValue,
exports.average = average, exports.getIntersection = getIntersection;
const KNOWLEDGE_START_INDEX = 1, getStrFromArray = array => array.map(((item, index) => `${index + 1}. ${item}`)).join("\n");
function findLastIndex(arr, predicate) {
for (let i = arr.length - 1; i >= 0; i--) if (predicate(arr[i], i, arr)) return i;
return -1;
}
exports.getStrFromArray = getStrFromArray, exports.findLastIndex = findLastIndex;
//# sourceMappingURL=common.js.map