前端经常会用到的JavaScript方法封装

 1.数组去重

function unique1(arr) {      return [...new Set(arr)] } function unique2(arr) {      var obj = { };     return arr.filter(ele => {          if (!obj[ele]) {              obj[ele] = true;             return true;         }     }) } function unique3(arr) {      var result = [];     arr.forEach(ele => {          if (result.indexOf(ele) == -1) {              result.push(ele)         }     })     return result; } 

2.字符串去重

String.prototype.unique = function () {      var obj = { },前端         str = ,         len = this.length;     for (var i = 0; i < len; i++) {          if (!obj[this[i]]) {              str += this[i];             obj[this[i]] = true;         }     }     return str; } ###### //去除连续的字符串  function uniq(str) {      return str.replace(/(\w)\1+/g, $1) } 

3.输入一个值,返回其数据类型

function type(para) {      return Object.prototype.toString.call(para) } 

4.找出字符串中第一次只出现一次的经常字母

String.prototype.firstAppear = function () {      var obj = { },         len = this.length;     for (var i = 0; i < len; i++) {          if (obj[this[i]]) {              obj[this[i]]++;         } else {              obj[this[i]] = 1;         }     }     for (var prop in obj) {         if (obj[prop] == 1) {           return prop;        }     } } 

5.深拷贝 浅拷贝

//深克隆(深克隆不考虑函数) function deepClone(obj, result) {      var result = result || { };     for (var prop in obj) {          if (obj.hasOwnProperty(prop)) {              if (typeof obj[prop] == object && obj[prop] !== null) {                  // 引用值(obj/array)且不为null                 if (Object.prototype.toString.call(obj[prop]) == [object Object]) {                      // 对象                     result[prop] = { };                 } else {                      // 数组                     result[prop] = [];                 }                 deepClone(obj[prop], result[prop])     } else {          // 原始值或func         result[prop] = obj[prop]     }   } } return result; } // 深浅克隆是针对引用值 function deepClone(target) {      if (typeof (target) !== object) {          return target;     }     var result;     if (Object.prototype.toString.call(target) == [object Array]) {          // 数组         result = []     } else {          // 对象         result = { };     }     for (var prop in target) {          if (target.hasOwnProperty(prop)) {              result[prop] = deepClone(target[prop])         }     }     return result; } // 无法复制函数 var o1 = jsON.parse(jsON.stringify(obj1)); 

6.判断元素有没有子元素

function hasChildren(e) {      var children = e.childNodes,         len = children.length;     for (var i = 0; i < len; i++) {          if (children[i].nodeType === 1) {              return true;         }     }     return false; } 

7.返回当前的站群服务器时间(年月日时分秒)

function getDateTime() {      var date = new Date(),         year = date.getFullYear(),         month = date.getMonth() + 1,         day = date.getDate(),         hour = date.getHours() + 1,         minute = date.getMinutes(),         second = date.getSeconds();         month = checkTime(month);         day = checkTime(day);         hour = checkTime(hour);         minute = checkTime(minute);         second = checkTime(second);      function checkTime(i) {          if (i < 10) {                  i = "0" + i;        }       return i;     }     return "" + year + "年" + month + "月" + day + "日" + hour + "时" + minute + "分" + second + "秒" } 

8.兼容getElementsByClassName方法

Element.prototype.getElementsByClassName = Document.prototype.getElementsByClassName = function (_className) {      var allDomArray = document.getElementsByTagName(*);     var lastDomArray = [];     function trimSpace(strClass) {          var reg = /\s+/g;         return strClass.replace(reg,  ).trim()     }     for (var i = 0; i < allDomArray.length; i++) {          var classArray = trimSpace(allDomArray[i].className).split( );         for (var j = 0; j < classArray.length; j++) {              if (classArray[j] == _className) {                  lastDomArray.push(allDomArray[i]);                 break;             }         }     }     return lastDomArray; } 

9.封装自己的forEach方法

Array.prototype.myForEach = function (func, obj) {      var len = this.length;     var _this = arguments[1] ? arguments[1] : window;     // var _this=arguments[1]||window;     for (var i = 0; i < len; i++) {          func.call(_this, this[i], i, this)     } } 

10.封装自己的filter方法

Array.prototype.myFilter = function (func, obj) {      var len = this.length;     var arr = [];     var _this = arguments[1] || window;     for (var i = 0; i < len; i++) {          func.call(_this, this[i], i, this) && arr.push(this[i]);     }     return arr; } 

11.封装自己的数组map方法

Array.prototype.myMap = function (func) {      var arr = [];     var len = this.length;     var _this = arguments[1] || window;     for (var i = 0; i < len; i++) {          arr.push(func.call(_this, this[i], i, this));     }     return arr; } 

12.封装自己的服务器租用数组every方法

Array.prototype.myEvery = function (func) {      var flag = true;     var len = this.length;     var _this = arguments[1] || window;     for (var i = 0; i < len; i++) {          if (func.apply(_this, [this[i], i, this]) == false) {              flag = false;             break;         }     }     return flag; } 

13.封装自己的数组reduce方法

Array.prototype.myReduce = function (func, initialValue) {      var len = this.length,         nextValue,         i;     if (!initialValue) {          // 没有传第二个参数         nextValue = this[0];         i = 1;     } else {          // 传了第二个参数         nextValue = initialValue;         i = 0;     }     for (; i < len; i++) {          nextValue = func(nextValue, this[i], i, this);     }     return nextValue; } 

14.获取url中的参数

function getWindonHref() {      var sHref = window.location.href;     var args = sHref.split(?);     if (args[0] === sHref) {          return ;     }     var hrefarr = args[1].split(#)[0].split(&);     var obj = { };     for (var i = 0; i < hrefarr.length; i++) {          hrefarr[i] = hrefarr[i].split(=);         obj[hrefarr[i][0]] = hrefarr[i][1];     }     return obj; } 

15.数组排序

// 快排 [left] + min + [right] function quickArr(arr) {      if (arr.length <= 1) {          return arr;     }     var left = [],         right = [];     var pIndex = Math.floor(arr.length / 2);     var p = arr.splice(pIndex, 1)[0];     for (var i = 0; i < arr.length; i++) {          if (arr[i] <= p) {              left.push(arr[i]);         } else {              right.push(arr[i]);         }     }     // 递归     return quickArr(left).concat([p], quickArr(right)); } // 冒泡 function bubbleSort(arr) {      for (var i = 0; i < arr.length - 1; i++) {          for (var j = i + 1; j < arr.length; j++) {              if (arr[i] > arr[j]) {                  var temp = arr[i];                 arr[i] = arr[j];                 arr[j] = temp;             }         }     }     return arr; } function bubbleSort(arr) {      var len = arr.length;     for (var i = 0; i < len - 1; i++) {          for (var j = 0; j < len - 1 - i; j++) {              if (arr[j] > arr[j + 1]) {                  var temp = arr[j];                 arr[j] = arr[j + 1];                 arr[j + 1] = temp;             }         }     }     return arr; 
数据库
上一篇:ICANN 规章禁止转移已经被记录或者在60天前内转移的域名。
下一篇:二、如何选择合适的域名