2023-08-27 10:16:10 +00:00
|
|
|
/**
|
|
|
|
|
* 通配符比较
|
|
|
|
|
* @param {*} str 待比较的字符串
|
|
|
|
|
* @param {*} pattern 含有*或者?通配符的字符串
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
export function wildcardCompare(str: string, pattern: string): boolean {
|
|
|
|
|
const regex = pattern.replace(/[*?]/g, (match) => {
|
|
|
|
|
if (match === '*') {
|
|
|
|
|
return '.*';
|
|
|
|
|
} else if (match === '?') {
|
|
|
|
|
return '.';
|
|
|
|
|
} else {
|
|
|
|
|
return match
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
const regexPattern = new RegExp('^' + regex + '$');
|
|
|
|
|
return regexPattern.test(str);
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-27 11:38:56 +00:00
|
|
|
/**
|
|
|
|
|
* 深度复制
|
|
|
|
|
* @param obj 待复制的对象
|
|
|
|
|
* @returns 复制的对象
|
|
|
|
|
*/
|
|
|
|
|
export function deepClone(obj: any) {
|
|
|
|
|
if (obj == null || typeof obj !== 'object') {
|
|
|
|
|
return obj;
|
|
|
|
|
}
|
|
|
|
|
let result;
|
|
|
|
|
if (Array.isArray(obj)) {
|
|
|
|
|
result = [];
|
|
|
|
|
} else {
|
|
|
|
|
result = new Map();
|
|
|
|
|
}
|
|
|
|
|
for (let [key, value] of Object.entries(obj)) {
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
result[key] = deepClone(value);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
2023-08-28 10:21:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 深度复制
|
|
|
|
|
* @param obj 待复制的对象
|
|
|
|
|
* @param result 要复制到的对象
|
|
|
|
|
* @returns 复制的对象
|
|
|
|
|
*/
|
2023-08-28 15:36:12 +00:00
|
|
|
export function deepCloneTo<T>(obj: T, result: T) {
|
2023-08-28 10:21:55 +00:00
|
|
|
if (obj == null || typeof obj !== 'object') {
|
|
|
|
|
return obj;
|
|
|
|
|
}
|
|
|
|
|
for (let [key, value] of Object.entries(obj)) {
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
result[key] = deepClone(value);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
2023-08-27 10:16:10 +00:00
|
|
|
}
|