加入收藏 | 设为首页 | 会员中心 | 我要投稿 葫芦岛站长网 (https://www.0429zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

JavaScript常用工具方法封装

发布时间:2019-02-15 02:49:27 所属栏目:优化 来源:佚名
导读:JavaScript 1. type 类型判断 isString(o){//是否字符串 returnObject.prototype.toString.call(o).slice(8,-1)==='String' } isNumber(o){//是否数字 returnObject.prototype.toString.call(o).slice(8,-1)==='Number' } isBoolean(o){//是否boolean retu

3. Array

  1. /*判断一个元素是否在数组中*/ 
  2. contains (arr, val) { 
  3.     return arr.indexOf(val) != -1 ? true : false; 
  4.  
  5. /** 
  6.  * @param  {arr} 数组 
  7.  * @param  {fn} 回调函数 
  8.  * @return {undefined} 
  9.  */ 
  10. each (arr, fn) { 
  11.     fn = fn || Function; 
  12.     var a = []; 
  13.     var args = Array.prototype.slice.call(arguments, 1); 
  14.     for(var i = 0; i < arr.length; i++) { 
  15.         var res = fn.apply(arr, [arr[i], i].concat(args)); 
  16.         if(res != null) a.push(res); 
  17.     } 
  18.  
  19. /** 
  20.  * @param  {arr} 数组 
  21.  * @param  {fn} 回调函数 
  22.  * @param  {thisObj} this指向 
  23.  * @return {Array}  
  24.  */ 
  25. map (arr, fn, thisObj) { 
  26.     var scope = thisObj || window; 
  27.     var a = []; 
  28.     for(var i = 0, j = arr.length; i < j; ++i) { 
  29.         var res = fn.call(scope, arr[i], i, this); 
  30.         if(res != null) a.push(res); 
  31.     } 
  32.     return a; 
  33.  
  34. /** 
  35.  * @param  {arr} 数组 
  36.  * @param  {type} 1:从小到大   2:从大到小   3:随机 
  37.  * @return {Array} 
  38.  */ 
  39. sort (arr, type = 1) { 
  40.     return arr.sort( (a, b) => { 
  41.         switch(type) { 
  42.             case 1: 
  43.                 return a - b; 
  44.             case 2: 
  45.                 return b - a; 
  46.             case 3: 
  47.                 return Math.random() - 0.5; 
  48.             default: 
  49.                 return arr; 
  50.         } 
  51.     }) 
  52.  
  53. /*去重*/ 
  54. unique (arr) { 
  55.     if ( Array.hasOwnProperty('from') ) { 
  56.         return Array.from(new Set(arr)); 
  57.     }else{ 
  58.         var n = {},r=[];  
  59.         for(var i = 0; i < arr.length; i++){ 
  60.             if (!n[arr[i]]){ 
  61.                 n[arr[i]] = true;  
  62.                 r.push(arr[i]); 
  63.             } 
  64.         } 
  65.         return r; 
  66.     } 
  67.     // 注:上面 else 里面的排重并不能区分 2 和 '2',但能减少用indexOf带来的性能,暂时没找到替代的方法。。。 
  68.     /* 正确排重 
  69.     if ( Array.hasOwnProperty('from') ) { 
  70.         return Array.from(new Set(arr)) 
  71.     }else{ 
  72.         var r = [], NaNBol = true 
  73.         for(var i=0; i < arr.length; i++) { 
  74.             if (arr[i] !== arr[i]) { 
  75.                 if (NaNBol && r.indexOf(arr[i]) === -1) { 
  76.                     r.push(arr[i]) 
  77.                     NaNBol = false 
  78.                 } 
  79.             }else{ 
  80.                 if(r.indexOf(arr[i]) === -1) r.push(arr[i]) 
  81.             } 
  82.         } 
  83.         return r 
  84.     } 
  85.  
  86.      */ 
  87.  
  88. /*求两个集合的并集*/ 
  89. union (a, b) { 
  90.     var newArr = a.concat(b); 
  91.     return this.unique(newArr); 
  92.  
  93. /*求两个集合的交集*/ 
  94. intersect (a, b) { 
  95.     var _this = this; 
  96.     a = this.unique(a); 
  97.     return this.map(a, function(o) { 
  98.         return _this.contains(b, o) ? o : null; 
  99.     }); 
  100.  
  101. /*删除其中一个元素*/ 
  102. remove (arr, ele) { 
  103.     var index = arr.indexOf(ele); 
  104.     if(index > -1) { 
  105.         arr.splice(index, 1); 
  106.     } 
  107.     return arr; 
  108.  
  109. /*将类数组转换为数组的方法*/ 
  110. formArray (ary) { 
  111.     var arr = []; 
  112.     if(Array.isArray(ary)) { 
  113.         arr = ary; 
  114.     } else { 
  115.         arr = Array.prototype.slice.call(ary); 
  116.     }; 
  117.     return arr; 
  118.  
  119. /*最大值*/ 
  120. max (arr) { 
  121.     return Math.max.apply(null, arr); 
  122.  
  123. /*最小值*/ 
  124. min (arr) { 
  125.     return Math.min.apply(null, arr); 
  126.  
  127. /*求和*/ 
  128. sum (arr) { 
  129.     return arr.reduce( (pre, cur) => { 
  130.         return pre + cur 
  131.     }) 
  132.  
  133. /*平均值*/ 
  134. average (arr) { 
  135.     return this.sum(arr)/arr.length 
  136. }  

(编辑:葫芦岛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!