开发用到的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;i
4、动态去重
vararr=[1,2,3,4];
functionadd(){
varnewarr=[];
$('.addEle').click(()=>{
varrnd=Math.ceil(Math.random()*10);
newarr.push(rnd)
for(vari=0;i
5、去除字符串空格(包含三种情况)
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)//2
9、获取元素相对于浏览器窗口的位置,返回一个{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)//4
11、计算出数组中出现次数最多的元素
vararrayObj=[1,1,2,3,3,3,4,5,5];
vartepm='',count=0;
varnewarr=newArray();
for(vari=0;i
12、数组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;i
17、对比两个数组,取出交集
Array.intersect=function(){
varresult=newArray();
varobj={};
for(vari=0;i
18、数组和对象比较。取出对象的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;i
20、判断数组是否包含某个元素
Array.prototype.contains=function(val){
for(vari=0;i