开发用到的js封装方法(20种)
1、判断是否是一个数组
functionisArray(arr){ returnObject.prototype.toString.call(arr)==='[objectArray]'; } isArray([1,2,3])//true
2、判断是否是一个函数(三种)
functionisFunction(fn){ returnObject.prototype.toString.call(fn)==='[objectFunction]'; returnfn.constructor==Function; returnfninstanceofFunction; returntypeof(fn)==Function; }
3、数组去重,只考虑数组中元素为数字或者字符串
functionnewarr(arr){ vararrs=[]; for(vari=0;i4、动态去重
vararr=[1,2,3,4]; functionadd(){ varnewarr=[]; $('.addEle').click(()=>{ varrnd=Math.ceil(Math.random()*10); newarr.push(rnd) for(vari=0;i5、去除字符串空格(包含三种情况)
functiontrim(str){ returnstr.replace(/^[""||""]*/,"").replace(/[""|""]*$/,"");//去除头和尾 returnstr.replace(/\s/g,'');//去除所有空格 returnstr.replace(/(\s*$)/g,"");//去除右边所有空格 }6、判断是否为邮箱地址
functionisEmail(emailStr){ varreg=/^[a-zA-Z0-9]+([._-]*[a-zA-Z0-9]*)*@[a-zA-Z0-9]+.[a-zA-Z0-9{2,5}$]/; varresult=reg.test(emailStr); if(result){ alert("ok"); }else{ alert("error"); } }7、判断是否是手机号
functionisMobilePhone(phone){ varreg=/^1\d{10}$/; if(reg.test(phone)){ alert('ok'); }else{ alert('error'); } }8、获取一个对象里面第一次元素的数量
functiongetObjectLength(obj){ vari=0; for(varattrinobj){ if(obj.hasOwnProperty(attr)){ i++; } } console.log(i); } varobj={name:'kob',age:20}; getObjectLength(obj)//29、获取元素相对于浏览器窗口的位置,返回一个{x,y}对象
functiongetPosition(element){ varoffsety=0; offsety+=element.offsetTop; varoffsetx=0; offsetx+=element.offsetLeft; if(element.offsetParent!=null){ getPosition(element.offsetParent); } return{Left:offsetx,Top:offsety}; }10、判断某个字母在字符串中出现的次数
varstr='Tobe,ornottobe,thatisthequestion.'; varcount=0; varpos=str.indexOf('e'); while(pos!==-1){ count++; pos=str.indexOf('e',pos+1); } console.log(count)//411、计算出数组中出现次数最多的元素
vararrayObj=[1,1,2,3,3,3,4,5,5]; vartepm='',count=0; varnewarr=newArray(); for(vari=0;i12、数组filter(搜索功能)
varfruits=['apple','banana','grapes','mango','orange']; functionfilterItems(query){ returnfruits.filter(function(el){ returnel.toLowerCase().indexOf(query.toLowerCase())>-1; }) } console.log(filterItems('ap'));//['apple','grapes']13、copy对象(第一种)
//第一种 varcloneObj=function(obj){ varnewObj={}; if(objinstanceofArray){ newObj=[]; } for(varkeyinobj){ varval=obj[key]; newObj[key]=typeofval==='object'?cloneObj(val):val; } returnnewObj; }; //第二种 functionclone(origin,target){ vartarget=target||{}; for(varpropinorigin){ target[prop]=origin[prop]; } returntarget; }14、深度克隆
varnewObj={}; functiondeepClone(origin,target){ vartarget=target||{}, toStr=Object.prototype.toString, arrStr="[objectArray]"; for(varpropinorigin){ if(origin.hasOwnProperty(prop)){ if(origin[prop]!="null"&&typeof(origin[prop])=='object'){//判断原型链 target[prop]=(toStr.call(origin[prop])==arrStr)?[]:{}//判断obj的key是否是数组 deepClone(origin[prop],target[prop]);//递归的方式 }else{ target[prop]=origin[prop]; } } } returntarget } deepClone(obj,newObj); console.log(newObj)15、求数组最大值和最小值
Array.prototype.max=function(){ returnMath.max.apply({},this) } Array.prototype.min=function(){ returnMath.min.apply({},this) } console.log([1,5,2].max())16、json数组去重
functionUniquePay(paylist){ varpayArr=[paylist[0]]; for(vari=1;i17、对比两个数组,取出交集
Array.intersect=function(){ varresult=newArray(); varobj={}; for(vari=0;i18、数组和对象比较。取出对象的key和数组元素相同的
vararr=['F00006','F00007','F00008']; varobj={'F00006':[{'id':21}],'F00007':[{'id':11}]} varnewobj={}; for(variteminobj){ if(arr.includes(item)){ newobj[item]=obj[item] } } console.log(newObj)19、删除数组中某个元素
//第一种 Array.prototype.remove=function(val){ varindex=this.indexOf(val); if(index!=0){ this.splice(index,1) } } [1,3,4].remove(3) //第二种 functionremove(arr,indx){ for(vari=0;i20、判断数组是否包含某个元素
Array.prototype.contains=function(val){ for(vari=0;i