/** * 數據類型檢測 * params: variable */
let _type = typeof tag,
_toStr = Object.prototype.toString;
if (_type === "object") {
let res = _toStr.call(tag).slice(8, -1);
return res.toLowerCase();
} else {
return _type;
}
}
/**
* 反轉數組, 返回處理后的數組
* 引用类型: 会变更原数组
* params: array
*/
export function reversalArr(arr) {
let left = 0,
right = arr.length - 1,
temp;
while (left < right) {
temp = arr[left];
arr[left++] = arr[right];
arr[right--] = temp;
}
return arr;
}
/**
* 獲取對象成員的個數
* params: object
*/
export function objSize(target) {
let s = Object.prototype.toString.call(target);
if (s === "[object Object]") {
return Object.keys(target).length;
}
}
/**
* 判断回文字符
* params: string
*/
export function judgeStr(str) {
if (typeof str === "string") {
str = str.toLowerCase();
let s = str.split("").reverse().join("");
return s === str;
}
}
/**
* 字符串去重
* params: string
*/
export function removeRepString(str) {
if (typeof str === "string") {
let strBox = {},
strArr = [],
len = str.length,
curr;
for (let i = 0; i < len; i++) {
curr = str[i];
if (!strBox[curr]) {
strBox[curr] = true;
strArr.push(curr);
}
}
return strArr.join("");
}
}
/**
* 統計出現頻次最高的字符
* params: str;
* return->array: 字符、出现次数
*/
export function maximumTime(str) {
let len = str.length,
temp,
maxStr = "",
maxCount = 0;
str = str.split("").sort().join("");
for (let i = 0; i < len; i++) {
temp = str.charAt(i);
let _count = str.lastIndexOf(temp) - i + 1;
if (_count > maxCount) {
maxCount = _count;
maxStr = temp;
}
i = str.lastIndexOf(temp);
}
return [maxStr, maxCount];
}
/**
* 深拷貝(對象、數組)
* params: [array || object]
*/
export function deepClone(obj) {
if (typeof obj !== "object" || obj === null) {
return obj;
}
let result = new obj.constructor();
for (let key in obj) {
if (Object.hasOwn(obj, key)) {
result[key] = deepClone(obj[key]);
}
}
return result;
}
/**
* Map 序列化,
* params: Map
*/
export function seriallizeMap(map) {
function replacer(key, value) {
if (value instanceof Map) {
return {
type: "isMap",
value: [...value],
};
} else {
return value;
}
}
function revier(key, value) {
if (value.type === "isMap") {
return new Map(value.value);
} else {
return value;
}
}
let strRes = JSON.stringify(map, replacer);
let parRes = JSON.parse(strRes, revier);
return parRes;
}
/**
* 手機號校驗
* params: phone
*/
export function verifyPhone(nub) {
return /^(0|86|17951)?(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57])[0-9]{8}$/.test(
nub
);
}
/**
* 郵箱號校驗
* params: Email
*/
export function verifyEmail(em) {
return /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(em);
}
/**
* 查看對象屬性描述,
* params: obj
*/
export function propertyDes(obj) {
return Object.getOwnPropertyDescriptors(obj);
}
/**
* 数组去重, 排序(可选),
* params: array, 排序标记true||false(默认false)
*/
export function removeRepOrSort(arr, sign = false) {
let res = arr.filter((item, index) => {
return arr.indexOf(item) === index;
});
// 如果需要排序
if (sign) {
res.sort((a, b) => {
if (a > b) {
return 1;
} else if (a < b) {
return -1;
} else {
return 0;
}
});
}
return res;
}
/**
* 查詢數組元素出現頻次,
* params: array, element可選(要查詢的單個元素)默認不查詢,
* return: Map對象
*/
export function frequencyCount(arr, element = "") {
let result = arr.reduce(function (prev, curr) {
let count = prev.get(curr);
prev = prev.has(curr) ? prev.set(curr, ++count) : prev.set(curr, 1);
return prev;
}, new Map());
if (element) {
return result.get(element);
}
return result;
}
/**
* 過濾數組假值,不變更源數組
* params: array
*/
export function removeEmpty(arr) {
return arr.filter((v) => v);
}
/**
* 找出兩個數組的交集元素,
* params: [array1, array2],
* return: 交集元素
*/
export function Intersection(ar1, ar2) {
return ar1.filter((x) => {
return ar2.includes(x);
});
}
/**
* 找出兩個數組的非交集元素,
* params: [arr1, arr2, selectReturnElement]
* return: 所有非交集元素或array1,array2單獨的非交集元素,默認all
*/
export function arrDifference(ar1, ar2, selectGet = "all") {
let r1 = ar1.filter((x) => !ar2.includes(x));
let r2 = ar2.filter((y) => !ar1.includes(y));
switch (selectGet) {
case "all":
return [...r1, ...r2];
case 1:
return [...r1];
case 2:
return [...r2];
default:
break;
}
}
/**
* 求數組平均值,
* params: array
*/
export function average(arr) {
if (Array.isArray(arr)) {
return (
arr.reduce((prev, curr) => {
return prev + curr;
}, 0) / arr.length
);
}
}
/**
* 獲取數組數組最大||最小值,
* params: [arr, max or min]
*/
export function maxOrmin(arr, m = "max") {
if (!Array.isArray(arr)) return;
return m === "max" ? Math.max(...arr) : Math.min(...arr);
}
/**
* 打亂數組順序,
* params: array
*/
export function randomOrder(arr) {
if (!Array.isArray(arr)) return;
return arr.sort(() => Math.random() - 0.5);
}
/**
* 扁平化數組,
* params: [arr]
*/
export function deepFlatten(arr) {
return arr.reduce((prev, curr) => {
return prev.concat(Array.isArray(curr) ? deepFlatten(curr) : curr);
}, []);
}