判断某种条件是否成立的函数集合

~ function(root) {
    var previousUtils = root.utils;
    var utils = {};
    var version = '0.0.1';
    var slice = Array.prototype.slice;
    var toString = Object.prototype.toString;
    var hasOwnProperty = Object.prototype.hasOwnProperty;
    var TypeMap = ['Error','Date','Function', 'Array', 'Object', 'Arguments', 'String', 'Null', 'Number', 'Boolean', 'Undefined'];
    for (var index = 0, len = TypeMap.length; index < len; index++) {
        var currentType = TypeMap[index];
        utils['is' + currentType] = (function(type) {
            return function() {
                var args = slice.call(arguments);
                var len = args.length;
                if (len === 0) {
                    return;
                } else if (len === 1) {
                    return toString.call(arguments[0]) === '[object ' + type + ']';
                } else {
                    for (var index = 0; index < len; index++) {
                        if (toString.call(args[index]) !== '[object ' + type + ']') {
                            return false;
                        }
                    }
                    return true;
                }

            }
        })(currentType)
    }



    utils.noConflict = function() {
        root.utils = previousUtils;
        return this;
    };

    utils.isInteger = Number.isInteger || function(digit) {
        return digit === (digit >> 0);
    }

    utils.isFloat = function(digit) {
        return /^\d+.\d+$/.test(digit);
    }

    utils.isEmpty = function(str) {
        return /^\s*$/.test(str);
    }

    utils.isFlase = function(variable) {
        switch(variable) {
            case '':
            case false:
            case 0:
            case undefined:
            case null: return true;
        }
        return false;
    }

    utils.isTrue = function(variable) {
        return !this.isFlase(variable);
    }

    utils.isIp = function(str) {
        return /^(([0-9]|[1-9][0-9]|1[0-9][0-9]|25[0-5]|2[0-4][0-9])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|25[0-5]|2[0-4][0-9])$/.test(str)
    }

    utils.isPrecision = function(str,from,to) {
        from = +from;
        to = to ? ','+ to : '';
        var regexp = new RegExp(from ? '^\\d+\\.\\d{'+ from + to + '}$': '^\\d+$');
        return regexp.test(str);
    }

    utils.isBeginWith = function(sourceStr,substr) {
        sourceStr = String(sourceStr);
        substr = String(substr);
        if (sourceStr.length < substr.length) {
            return false;
        }
        var len = substr.length;
        var position = 0;
        for(; position < len; position++) {
            if (sourceStr[position] !== substr[position]) {
                return false;
            }
        }
        return true;
    }

    utils.isEndWith = function(sourceStr,substr) {
        sourceStr = String(sourceStr);
        substr = String(substr);
        if (sourceStr.length < substr.length) {
            return false;
        }
        var sourceStrLen = sourceStr.length;
        var substrLen = substr.length;
        var offset = sourceStrLen - substrLen;
        var position = 0;
        for(; position < substrLen; position++) {
            if (sourceStr[position+offset] !== substr[position]) {
                return false;
            }
        }
        return true;
    }

    utils.isAscii = function(variable,Case) {
        var regexp;
        if (Case === undefined) {
            regexp = /^[a-z]+$/i;
        } else if (Case === false){
            regexp = /^[a-z]+$/;
        } else if (Case === true){
            regexp = /^[A-Z]+$/;
        }
        return regexp.test(variable);
    }

    utils.isEqual = function(source,dest) {

        if (this.isArray(source,dest)) {
            if (!this.isEqual(source.length,dest.length)) {
                return false;
            }
            var len = source.length;
            for (var index = 0;index < len; index++) {
                if (!this.isEqual(source[index],dest[index])) {
                        return false;
                }
            }
            return true;
        }
        else if (this.isObject(source,dest)) {
            var sourceLen = Object.keys(source).length;
            var destLen = Object.keys(dest).length;
            if (!this.isEqual(sourceLen, destLen)) {
                return false;
            }
            for (var key in source) {
                if (!hasOwnProperty.call(source,key)) {
                    continue
                }
                else if(!utils.isEqual(source[key],dest[key])) {
                    return false;
                }
            }
            return true;
        }
        else {
            return source === dest;
        }
    }

    utils.flatten =function(arg,overwrite) {
        if (utils.isArray(arg)) {
            return utils.flattenArray(arg);
        }
        else if(utils.isObject(arg)){
            return utils.flattenObject(arg,overwrite);
        } else {
            return [arg];
        }
    }

    utils.flattenArray = function(arr) {
        var result = [];
        var len = arr.length;
        var index = 0;
        var position = 0;
        for (;index<len;index++) {
            var value = arr[index];
            if (utils.isArray(value)) {
                var tmp = utils.flattenArray(value);
                var _len = tmp.length;
                var _index = 0;
                while (_index<_len) {
                    result[position++] = tmp[_index++];
                }
            }
            else{
                result[position++] = value;//utils.isObject(value) ? JSON.stringify(value) : value;
            }
        }
        return result;
    }

    utils.flattenObject = function(obj, overwrite) { //键值越前越深就可能会被后面的覆盖
        if (!utils.isObject(obj)) {
            return;
        }
        var keys = Object.keys(obj);
        var len = keys.length;
        var result = {};
        for (var index = 0; index < len; index++) {
            var value = obj[keys[index]];
            if (utils.isObject(value)) {
                var ret = utils.flatten(value, overwrite);
                var _keys = Object.keys(ret);
                var _len = _keys.length;
                for (var _index = 0; _index < _len; _index++) {
                    var _key = _keys[_index];
                    (result[_key] && !overwrite) || (result[_key] = ret[_key]);
                }
            } else {
                (result[keys[index]] && !overwrite) || (result[keys[index]] = value);
            }
        }
        return result;
    }

    utils.ArrayToObject = function(arr) {
        arr = utils.flatten(arr);
        var value;
        var result = {};
        while(value = arr.shift()) {
            value = utils.isObject(value) ? JSON.stringify(value) : value;
            result[value] = true;
        }   
        return result;
    }
    utils.isInclude = function(source,keys) {
        source = utils.flatten(source);
        keys = utils.flatten(keys);
        var index = 0;
        var result;
        if (this.isObject(source)) {
            for (;index < keys.length; index++) {
                if (!(keys[i] in source)) {
                    return false
                }
            }
            return true;
        } else if (this.isArray(source)){
            result = utils.ArrayToObject(source);
            for (;index < keys.length; index++) {
                var tmp = utils.isObject(keys[index]) ? JSON.stringify(keys[index]) : keys[index];
                if (!(tmp in result)) {
                    return false
                }
            }
            return true;
        } else {
            return source === keys;
        }
    }
    self._utils = utils;
}(self)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值