JS - API的封装:数组篇(1)

数组的API是居多的。

  //创建一个方法,返回value值对应的key
        function findKey (obj,value, compare = (a, b) => a === b) {  
            return Object.keys(obj).find(k => compare(obj[k], value))
        }
        findKey(myObject, keyValue)
  // 在数组中寻找min/max
        Math.max(...array)
        Math.min(...array)
        function getMax(array) {return Math.max(...array);}
        function getMax(array) {return Math.min(...array);}
 // 在数组中求min/max  不改变数组
        function getMax(arr) {
            var max = arr[0]
            for(var i = 0; i < arr.length; i++) {
                max = Math.max(max, arr[i]);
            }
            return max 
        };
 // 数组排序法二:
        arr.sort(function(a,b) {return a-b}) //升序
        arr.sort(function(a,b) {return b-a}) //降序
  // 深拷贝(数组和对象)
        function clone(target) { 
            if (typeof target === 'object') {
                 var cloneTarget = Array.isArray(target) ? [] : {}; 
                 for (var key in target) { 
                     cloneTarget[key] = clone(target[key]); 
                } 
                return cloneTarget; 
            } else { 
                return target; 
            } 
        };
// 对象的属性名统一格式转为大写
        function keysUpper(obj) {
            let reg = new RegExp("([a-z]+)", "g");
            for (let key in obj) {
                if (obj.hasOwnProperty(key)) {
                    let temp = obj[key];
                    if (reg.test(key.toString())) {
                        // 将修改后的属性名重新赋值给temp,并在对象obj内添加一个转换后的属性
                        temp = obj[key.replace(reg, function (result) {
                            return result.toUpperCase()
                        })] = obj[key];
                        // 将之前大写的键属性删除
                        delete obj[key];
                    }
                    // 如果属性是对象或者数组,重新执行函数
                    if (typeof temp === 'object' ||   Object.prototype.toString.call(temp) === '[object Array]') {
                        keysUpper(temp);
                    }
                }
            }
            return obj;
        };

 // 对象的属性名统一格式转为小写
        function keysLower(obj) {
            let reg = new RegExp("([A-Z]+)", "g");
            for (let key in obj) {
                if (obj.hasOwnProperty(key)) {
                    let temp = obj[key];
                    if (reg.test(key.toString())) {
                        // 将修改后的属性名重新赋值给temp,并在对象obj内添加一个转换后的属性
                        temp = obj[key.replace(reg, function (result) {
                            return result.toLowerCase()
                        })] = obj[key];
                        // 将之前大写的键属性删除
                        delete obj[key];
                    }
                    // 如果属性是对象或者数组,重新执行函数
                    if (typeof temp === 'object' || Object.prototype.toString.call(temp) === '[object Array]') {
                        keysLower(temp);
                    }
                }
            }
            return obj;
        };
// 日期格式化 为指定格式
        /**
         * function : Date Format
         * @param: {String} fmt
         * return: {}
        */
        Date.prototype.format = function(fmt){
        var o = {
            "M+" : this.getMonth()+1,                 //月份
            "d+" : this.getDate(),                    //日
            "h+" : this.getHours(),                   //小时
            "m+" : this.getMinutes(),                 //分
            "s+" : this.getSeconds(),                 //秒
            "q+" : Math.floor((this.getMonth()+3)/3), //季度
            "S"  : this.getMilliseconds()             //毫秒
        };

        if(/(y+)/.test(fmt)){
            fmt=fmt.replace(RegExp.$1, (this.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;
        }

/**
        * function: getAllIndex   找出指定元素出现的所有位置(字符串或者数组)
        * @param {array/string} arr/atr
        * @param {string} str
        * @returns {array} res
        */
        function getAllIndex(arr, element) {
            var res = [];
            var idx = arr.indexOf(element);
            while(idx != -1) {
                res.push(idx);
                idx = arr.indexOf(element, idx + 1);
            }
            return res;
        }
  /**
         * function: str_reverse
         * @param {String} str 
         * @returns {String} reverseStr
         */
        function str_reverse(str) {
            var reverseStr = '';
            for(var i = str.length-1; i >= 0; i--){
                reverseStr += str[i];
            }
            return reverseStr;
        }
         /**
         * function: str_indexOf
         * @param {String} str 
         * @param {String} check_str
         * @returns {Number} index
         */
        function str_indexOf(str, check_str) {
            var index = -1; // 初始化索引
            for(var i = 0; i < str.length; i++) {
                // 1. 截取字符片段
                // var substr = str_substr(str,i,check_str.length)
               var substr = str.substr(i, check_str.length)
               if(check_str === substr) {
                   return i
               }
            }
            return index;
        }
 /**
         * function: 数组扁平化 flatten
         * @param {array} 
         * return {array}
        */
        //法一:
        function flatten(arr) {
           var res = [];
           if(!(Array.isArray(arr))) throw new Error('params must be array'); 
           for(var i = 0; i < arr.length; i++) {
               if(Array.isArray(arr[i])){
                   res.concat(flatten(arr[i]))
               }else{
                   res.push(arr[i]);
               }
           }
           return res
       }
        //法二:
        function flatten(arr){
            var res = arr.reduce(function(prev, item) {
                return prev.concat(Array.isArray(item)? flatten(item):item)
            },[])
            return res
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值