老项目js工具组件

 记录一下老项目自定义js工具组件(ES5),持续补充方法

目前涉及如下

字符处理:trim,补0,hashcode

日期处理:字符日期时间转Date,format等

js处理:动态js脚本导入

数组处理:去重等

函数处理:函数重载续写等

var _commonUtil = {
    str: {
        toString: function(s) {
            return typeof s === 'string' ? s : s + "";
        },
        trim: function (s) {
            return s ? this.toString(s).trim() : "";
        },
        adjust: function (s, max) {
            var sub = max - s.length;
            if (sub === 0) {
                return s;
            } else if (sub < 0) {
                return s.substring(0, max);
            } else {
                var _s = "";
                for (var i = 0; i < sub; i++) {
                    _s += "0";
                }
                _s += s;
                return _s;
            }
        },
        hashCode: function (s) {
            var hash = 0;
            if (!s) {
                return hash;
            }
            for (var i = 0; i < s.length; i++) {
                var char = s.charCodeAt(i);
                hash = ((hash << 5) - hash) + char;
                hash = hash & hash;
            }
            return hash;
        }
    },
    date: {
        parseStr: function () {
            if (arguments.length) {
                return new Date(
                    arguments[0] || 1999,
                    arguments[1] - 1 || 0,
                    arguments[2] || 1,
                    arguments[3] || 0,
                    arguments[4] || 0,
                    arguments[5] || 0,
                    arguments[6] || 0
                );
            }
            return null;
        },
        parse: function (dateStr) {
            dateStr = _commonUtil.str.trim(dateStr);
            var numbers = dateStr.match(/\d+/g);
            if (numbers) {
                // yyyy MM dd HH mm ss SSS
                var values = [];
                var patternLens = [4, 2, 2, 2, 2, 2, 3];
                if (numbers.length === 1) {
                    var s = numbers[0];
                    var index = 0;
                    for (var i = 0; i < patternLens.length; i++) {
                        var len = patternLens[i];
                        var end = index + len;
                        if (end <= s.length) {
                            values.push(+s.substring(index, end));
                            index += len;
                        } else {
                            break;
                        }
                    }
                } else {
                    for (var j = 0; j < patternLens.length; j++) {
                        if (j < numbers.length) {
                            var n = numbers[j];
                            var l = patternLens[j];
                            if (n.length > l) {
                                numbers.splice(j + 1, 0, n.substring(l));
                            }
                            if (j === 0) {
                                // yyyy默认两位年份都拼接20
                                n = n.length === 2 ? "20" + n : n;
                            }
                            values.push(+_commonUtil.str.adjust(n, l))
                        } else {
                            break;
                        }
                    }
                }
                return this.parseStr.apply(this, values);
            }
            return null;
        },
        getCurrentDate: function () {
            var today = new Date();
            var yyyy = today.getFullYear();
            var mm = ('0' + (today.getMonth() + 1)).slice(-2); // 月份从0开始,需要+1
            var dd = ('0' + today.getDate()).slice(-2);
            return yyyy + '-' + mm + '-' + dd;
        },
        getCurrentTime: function () {
            var today = new Date();
            var hh = ('0' + today.getHours()).slice(-2);
            var mm = ('0' + today.getMinutes()).slice(-2);
            var ss = ('0' + today.getSeconds()).slice(-2);
            return hh + ':' + mm + ':' + ss;
        },
        formatDate: function (date, format) {
            if (!this.isDate(date)) {
                return null;
            }
            var map = {
                'yyyy': date.getFullYear(),
                'MM': ('0' + (date.getMonth() + 1)).slice(-2),
                'dd': ('0' + date.getDate()).slice(-2),
                'HH': ('0' + date.getHours()).slice(-2),
                'mm': ('0' + date.getMinutes()).slice(-2),
                'ss': ('0' + date.getSeconds()).slice(-2),
                'SSS': ('00' + date.getMilliseconds()).slice(-3)
            };
            return format.replace(/yyyy|MM|dd|HH|mm|ss|SSS/g, function (matched) {
                return map[matched];
            });
        },
        isDate: function (d) {
            return Object.prototype.toString.call(d) === '[object Date]';
        },
        compare: function (d1, d2) {
            d1 = this.isDate(d1) ? d1 : this.parse(d1);
            d2 = this.isDate(d2) ? d2 : this.parse(d2);
            if (d1 && d2) {
                var sub = d1.getTime() - d2.getTime();
                if (sub === 0) {
                    return 0;
                } else {
                    return sub > 0 ? 1 : -1;
                }
            }
            return NaN;
        }
    },
    file: {
        impJs: function (src, callback) {
            var script = document.createElement('script');
            script.src = src;
            script.type = "text/javascript";
            script.onload = callback;
            script.onerror = function () {
                console.error('Failed to load script: ' + src);
            };
            document.head.appendChild(script);
        }
    },
    list: {
        sort: function (list, options) {
            if (list && list.length) {
                var func;
                var desc = options && options.desc;
                var map = options && options.map;
                if (typeof list[0] === 'number') {
                    if (typeof map === 'function') {
                        func = function (a, b) {
                            return desc ? map(b) - map(a) : map(a) - map(b);
                        };
                    } else {
                        func = function (a, b) {
                            return desc ? b - a : a - b;
                        };
                    }
                } else {
                    if (typeof map === 'function') {
                        func = function (a, b) {
                            return desc ? (map(b) + "").localeCompare(map(a) + "") : (map(a) + "").localeCompare(map(b) + "");
                        };
                    } else {
                        func = function (a, b) {
                            return desc ? (b + "").localeCompare(a + "") : (a + "").localeCompare(b + "");
                        };
                    }

                }
                return list.sort(func);
            }
            return [];
        },
        set: function (list, options) {
            if (list && list.length) {
                var map = typeof (options && options.map) === 'function' ? options.map : null;
                var uniqueList = [];
                var source;
                if (map) {
                    var uniIds = [];
                    for (var i = 0; i < list.length; i++) {
                        source = list[i];
                        var d = map(source);
                        if (uniIds.indexOf(d, 0) === -1) {
                            uniIds.push(d);
                            uniqueList.push(source);
                        }
                    }
                } else {
                    for (var j = 0; j < list.length; j++) {
                        source = list[j];
                        if (uniqueList.indexOf(source, 0) === -1) {
                            uniqueList.push(source);
                        }
                    }
                }
                return uniqueList;
            }
            return [];
        },
        setThenSort: function (list, options) {
            return this.sort(this.set(list, options), options);
        },
        join: function (list, s) {
            var str = "";
            if (list && list.length) {
                s = s ? s : ",";
                for (var i = 0; i < list.length; i++) {
                    str += list[i] + s;
                }
                return str.substring(0, str.length - 1);
            }
            return str;
        },
        deal: function(list, callback){
            if (list && typeof callback === 'function'){
                var v;
                for (var i = 0; i < list.length; i++){
                    if (callback(v = list[i], i) === -1){
                        return {"index": i, "value": v};
                    }
                }
            }
            return null;
        },
        hashCode: function (list) {
            return _commonUtil.str.hashCode(this.join(list));
        }
    },
    obj: {
        parse: function(str, log) {
            try {
                if (str){
                    return JSON.parse(str);
                }
            }catch (e) {
                if (log){
                    _commonUtil.console.log(e);
                }
            }
            return null;
        },
        deal: function (obj, callback) {
            if (obj && typeof callback === 'function'){
                var v;
                for (var k in obj){
                    if (obj.hasOwnProperty(k) && callback(v = obj[k], k) === -1){
                        return {"key": k, "value": v};
                    }
                }
            }
            return null;
        },
        len: function (o) {
            return o && o.constructor === Object && Object.keys(o).length || 0;
        }
    },
    num: {
        convert: function (s, def) {
            if (typeof s === 'number'){
                return isFinite(s) ? s : def;
            }
            var n = s ? +s : NaN;
            return isFinite(n) ? n : def;
        }
    },
    func: {
        overwrite: function (target, name, newFunc) {
            var f = target[name];
            if (typeof f === 'function') {
                target[name] = function () {
                    return newFunc.apply(
                        {
                            inherit: function () {
                                return f.apply(target, arguments);
                            }
                        }
                        , arguments);
                };
            } else {
                target[name] = function () {
                    return newFunc.apply(
                        {
                            inherit: function () {}
                        }
                        , arguments);
                };
            }
        }
    },
    console: {
        c: function() {
            var _console = window.console;
            if (_console && _console.dir && _console.debug){
                return _console;
            }
            _console = window.parent.console;
            if (_console && _console.dir && _console.debug){
                return _console;
            }
            return null;
        },
        execute: function(){
            var _c = this.c();
            var method;
            var target;
            if(_c && arguments.length > 1 && (method = arguments[0]) && (target = _c[method])) {
                target.apply(null, Array.prototype.slice.call(arguments, 1))
            }
        },
        log: function () {
            var args = Array.prototype.slice.call(arguments);
            args.unshift("log");
            this.execute.apply(this, args);
        },
        error: function(){
            var args = Array.prototype.slice.call(arguments);
            args.unshift("error");
            this.execute.apply(this, args);
        },
        warn: function(){
            var args = Array.prototype.slice.call(arguments);
            args.unshift("warn");
            this.execute.apply(this, args);
        },
        dir: function() {
            var args = Array.prototype.slice.call(arguments);
            args.unshift("dir");
            this.execute.apply(this, args);
        },
        alert: function () {
            var str = "";
            for (var i = 0; i < arguments.length; i++) {
                var _p = arguments[i];
                try {
                    str += (_p && typeof _p === 'object' ? JSON.stringify(_p) : _p) + " ";
                } catch (e) {
                    str += _p + " ";
                }
            }
            alert(str.substring(0, str.length - 1));
        }
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值