项目开发中通用方法整理

81 阅读3分钟

在我们的日常开发中,会将一些公用的方法抽离出来,放到统一的utils文件中,然后暴露给外部去使用,这就使得我们的项目更加的完善,也更加的有层次感。接下来,我将一些目前在我的项目中常用的方法贴出来,可供以后使用。

常用方法

1.判断方法

// 内部函数, 用于判断对象类型
function _getType(object) {
    return Object.prototype.toString.call(object).match(/^[object\s(.*)]$/)[1];
}
// 判断是否为数组
export function isArray(obj) {
    return _getType(obj).toLowerCase() === 'array';
}
// 判断是否为字符串
export function isString(obj) {
    return _getType(obj).toLowerCase() === 'string';
}
// 判断是否为日期
export function isDate(obj) {
    return _getType(obj).toLowerCase() === 'date';
}
// 判断是否为对象
export function isObject(obj) {
    return _getType(obj).toLowerCase() === 'object';
}
// 判断是否为数值
export function isNumber(obj) {
    return _getType(obj).toLowerCase() === 'number' && !isNaN(obj);
}



// 判断参数是否为空, 包括null, undefined, [], '', {}
// param {object} obj 需判断的对象
export function isEmpty(obj) {
    let empty = false;
    if (obj === null || obj === undefined) {    // null and undefined
        empty = true;
    } else if ((isArray(obj) || isString(obj)) && obj.length === 0) {
        empty = true;
    } else if (isObject(obj)) {
        let hasProp = false;
        for (let prop in obj) {
            if (prop) {
                hasProp = true;
                break;
            }
        }
        if (!hasProp) {
            empty = true;
        }
    }
    return empty;
}

// 判断参数是否不为空
export function isNotEmpty(obj) {
    return !isEmpty(obj);
}

// 判断参数是否为空字符串, 比isEmpty()多判断字符串中有空格的情况, 如: '   '.
// param {string} str 需判断的字符串
export function isBlank(str) {
    if (isEmpty(str)) {
        return true;
    } else if (isString(str) && str.trim().length === 0) {
        return true;
    }
    return false;
}

// 判断参数是否不为空字符串
export function isNotBlank(obj) {
    return !isBlank(obj);
}

// 判断参数是否为FormData对象
export function isFormData(obj) {
    return obj instanceof FormData;
}

2.获取地址栏参数对象以及值

// 获取 url 参数,因为 this.props.location.query 不能得到带有 # 的参数,所以添加此方法
export function getQueryParams() {
    let obj = {}, name, value;
    let str = location.href;
    let num = str.indexOf('?');
    str = str.substr(num + 1);
    const arr = str.split('&');
    for (let i = 0; i < arr.length; i++) {
        num = arr[i].indexOf('=');
        if (num > 0) {
            name = arr[i].substring(0, num);
            value = arr[i].substr(num + 1);
            obj[name] = value;
        }
    }
    return obj;
}

// 通过URL搜索对象获取url参数, 如www.xxx.com?a=1&b=2, getURLParam('a') return 1
export function getURLParam(name) {
    if (isBlank(name)) {
        return;
    }
    let urlQuery = getQueryParams();
    return urlQuery[name];
}

3.生成指定范围内随机整数

export function random(min, max) {
    min = min || -90;
    max = max || 90;
    return min + Math.floor(Math.random() * (max - min));
}

4.深拷贝

// 第一种方式
export function deepClone(obj) {
    return JSON.parse(JSON.stringify(obj));
}
// 第二种方式
export function deepClone(source) {
    if (!source && typeof source !== 'object') {
        throw new Error('error arguments', 'shallowClone');
    }
    const targetObj = source.constructor === Array ? [] : {};
    for (const keys in source) {
        if (source.hasOwnProperty(keys)) {
            if (source[keys] && typeof source[keys] === 'object') {
                targetObj[keys] = source[keys].constructor === Array ? [] : {};
                targetObj[keys] = deepClone(source[keys]);
            } else {
                targetObj[keys] = source[keys];
            }
        }
    }
    return targetObj;
}

5.缓存类方法

项目中,我们有需要操作缓存的情况,类似sessionStorage或localStorage等。

5.1. sessionStorage方法

// param name 存储名称
// param value 存储值
export function setSession(name, value) {
    if (typeof sessionStorage === 'object') {
        var data = value;
        if (typeof value !== 'string') {
            if (data === undefined) {
                data = null;
            } else {
                data = JSON.stringify(data);
            }
        }
        sessionStorage.setItem(name, data);
    }
}

// 获取session
// param name 存储名称
export function getSession(name) {
    if (typeof sessionStorage === 'object') {
        var data = sessionStorage.getItem(name);
        try {
            return JSON.parse(data);
        } catch (e) {
            return data;
        }
    }
    return null;
}

5.2. localStorage方法

// 设置Local
// param name 存储名称
// param value 存储值
export function setLocal(name, value) {
    if (typeof localStorage === 'object') {
        var data = value;
        if (typeof value !== 'string') {
            if (data === undefined) {
                data = null;
            } else {
                data = JSON.stringify(data);
            }
        }
        localStorage.setItem(name, data);
    }
}
// 获取Local
// param name 存储名称
export function getLocal(name) {
    if (typeof localStorage === 'object') {
        var data = localStorage.getItem(name);
        try {
            return JSON.parse(data);
        } catch (e) {
            return data;
        }
    }
    return null;
}

5.3. sessionStorage和localStorage共有方法

// param name 存储名称
export function remove(name) {
    if (typeof sessionStorage === 'object') {
        if (sessionStorage.getItem(name)) {
            sessionStorage.removeItem(name);
        }
    }
    if (typeof localStorage === 'object') {
        if (localStorage.getItem(name)) {
            localStorage.removeItem(name);
        }
    }
}
// 移除session或者Local全部内容
export function clear() {
    if (typeof sessionStorage === 'object') {
        sessionStorage.clear();
    }
    if (typeof localStorage === 'object') {
        localStorage.clear();
    }
}

总结

以上就是项目中遇到的一些公共方法,欢迎大家指正补充。