/** * @param {Number} 數值 * @param {Number} 保留位數 */
export const u_fixed = (val, num = 2) => val.toFixed(num);
複製代碼
/** * 日期時間 * @param {Date} 時間實例 * @param {String} 格式 */
const timeFmt = (date, fmt = 'yyyy/MM/dd') => {
var o = {
"M+": date.getMonth() + 1,
"d+": date.getDate(),
"h+": date.getHours(),
"m+": date.getMinutes(),
"s+": date.getSeconds(),
"q+": Math.floor((date.getMonth() + 3) / 3),
"S": date.getMilliseconds()
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
}
複製代碼
/** * 倒計時 * @param {Date} endTime 目標時間戳 * @param {String} fmt 格式 * @param {String} prevText 前置文案 * @param {String} lastText 後置文案 */
const countDown = (endTime, fmt = 'dd天hh時mm分ss秒', prevText = "", lastText = "") => {
var diffTime = parseInt((endTime.getTime() - (new Date()).getTime()) / 1000);
var day = ~~(diffTime / (60 * 60 * 24)),
hour = ~~((diffTime - day * 24 * 60 * 60) / 3600),
minute = ~~((diffTime - day * 24 * 60 * 60 - hour * 3600) / 60),
second = ~~((diffTime - day * 24 * 60 * 60 - hour * 3600 - minute * 60));
var o = {
"d+": day,
"h+": hour,
"m+": minute,
"s+": second
};
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)))
}
}
return (prevText + fmt + lastText);
}
複製代碼
/** * 數組去重 * @param {Array} 數組 */
const unique = array => {
const tmp = new Map();
return array.filter(item => {
return !tmp.has(item) && tmp.set(item, 1);
})
}
複製代碼
/** * 數組亂序 * @param {Array} 源數組 */
const arrDisorder = (arr) => {
let t, j, i = arr.length;
for (; i;) {
j = ~~(Math.random() * i);
t = arr[--i];
arr[i] = arr[j];
arr[j] = t;
}
return arr
}
複製代碼
/** * 深度拷貝 * @param {Object} 源對象 */
const cloneJSON = source => JSON.parse(JSON.stringify(source));
const deepClone = (obj, hash = new WeakMap()) => {
if (!isObject(obj)) return obj;
if (hash.has(obj)) return hash.get(obj);
let isArray = Array.isArray(obj);
let cloneObj = isArray ? [] : {};
hash.set(obj, cloneObj);
let allDesc = Object.getOwnPropertyDescriptors(obj);
let symKeys = Object.getOwnPropertySymbols(obj);
if (symKeys.length > 0) {
symKeys.forEach(symKey => {
cloneObj[symKey] = isObject(obj[symKey]) ? deepClone(obj[symKey], hash) : obj[symKey];
})
}
cloneObj = Object.create(
Object.getPrototypeOf(cloneObj),
allDesc
)
for (let key in obj) {
cloneObj[key] = isObject(obj[key]) ? deepClone(obj[key], hash) : obj[key];
}
return cloneObj;
}
// 判斷一個值是否是對象
function isObject(o) {
return (typeof o === 'object' || typeof o === 'function') && o !== null;
}
複製代碼
/** * 截取指定字節的字符串 * @param str 要截取的字符穿 * @param len 要截取的長度,根據字節計算 * @param suffix 截取前len個後,其他的字符的替換字符,通常用「…」 */
const cutString = (str, len, suffix = "") => {
if (!str || len <= 0) return "";
let tempLen = 0;
for (let i = 0, length = str.length; i < length; i++) {
if (str.charCodeAt(i) > 255) {
tempLen += 2;
} else {
tempLen++;
}
if (tempLen == len) {
return str.substring(0, i + 1) + suffix;
} else if (tempLen > len) {
return str.substring(0, i) + suffix;
}
}
return str;
}
複製代碼
const randomStr = (len = 8, str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') => {
let strLen = str.length,
tempStr = '';
for (let i = 0; i < len; i++) {
tempStr += str.charAt(randomInt(0, strLen));
}
return tempStr;
}
// 生成範圍內隨機整數
function randomInt(min, max) {
return ~~(Math.random() * (max - min + 1) + min);
}
複製代碼
/** * 判斷值是否爲空 * @param {*} value */
const isEmpty = value => {
return (
value === undefined ||
value === null ||
(typeof value === "object" && Object.keys(value).length === 0) ||
(typeof value === "string" && value.trim().length === 0)
);
}
複製代碼
有大神寫的,也有參考大神後從新寫的,隨便看看就好,別太當真。數組