不可或缺的工具方法[持續更新收集]

經常使用的方法

格式化

保留小數位

/** * @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)
    );
}
複製代碼

結語

有大神寫的,也有參考大神後從新寫的,隨便看看就好,別太當真。數組

相關文章
相關標籤/搜索