Javascript中常见的逻辑题和解决方法
一、统计数组arr中值等于item的元素出现的次数
functioncount(arr,item){
varcount=0;
arr.forEach(function(e){
//e为arr中的每一个元素,与item相等则count+1
e==item?count++:0;
});
returncount;
}
functioncount(arr,item){
returnarr.filter(function(a){
return(a==item);
}).length
}
functioncount(arr,item){
varres;
return(res=arr.toString().match(newRegExp("//b"+item+"//b","g")))?res.length:0;
}
functioncount(arr,item){
varcount=0;
arr.map(function(a){
if(a===item){
count++;
}
});
returncount;
}
二、为数组arr中的每个元素求二次方。不要直接修改数组arr,结果返回新的数组
functionsquare(arr){
returnarr.map(function(item,index,array){
returnitem*item;
})
}
functionsquare(arr){
//声明一个新的数组存放结果
vara=[];
arr.forEach(function(e){
//将arr中的每一个元素求平方后,加入到a数组中
a.push(e*e);
});
returna;
}
functionsquare(arr){
//复制一个arr数组
varnewarr=arr.slice(0);
for(vari=0;i<newarr.length;i++){
newarr[i]=newarr[i]*newarr[i];
}
returnnewarr;
}
functionsquare(arr){
returnarr.map(function(item){
returnMath.pow(item,2);
})
}
三、将数组arr中的元素作为调用函数fn的参数
functionargsAsArray(fn,arr){
returnfn.apply(this,arr);
}
functionargsAsArray(fn,arr){
returnfunction(para1,para2){
returnpara1.apply(this,para2);
}(fn,arr);
}
四、完成函数createModule,调用之后满足如下要求:
1、返回一个对象
2、对象的greeting属性值等于str1,name属性值等于str2
3、对象存在一个sayIt方法,该方法返回的字符串为greeting属性值+‘,‘+name属性值
functioncreateModule(str1,str2){
varobj={
greeting:str1,
name:str2,
sayIt:function(){
//两个属性前面都需要加上this
returnthis.greeting+","+this.name;
}
};
returnobj;
}
//使用构造函数法
functioncreateModule(str1,str2){
functionObj(){
this.greeting=str1;
this.name=str2;
this.sayIt=function(){
returnthis.greeting+','+this.name;
};
}
returnnewObj();
}
//构造函数与原型组合
functioncreateModule(str1,str2){
functionCreateMod(){
this.greeting=str1;
this.name=str2;
}
CreateMod.prototype.sayIt=function(){
returnthis.greeting+','+this.name;
}
returnnewCreateMod();
}
五、已知fn为一个预定义函数,实现函数curryIt,调用之后满足如下条件:
1、返回一个函数a,a的length属性值为1(即显式声明a接收一个参数)
2、调用a之后,返回一个函数b,b的length属性值为1
3、调用b之后,返回一个函数c,c的length属性值为1
4、调用c之后,返回的结果与调用fn的返回值一致
5、fn的参数依次为函数a,b,c的调用参数
输入例子:
varfn=function(a,b,c){returna+b+c};curryIt(fn)(1)(2)(3);
functioncurryIt(fn){
//获取fn参数的数量
varn=fn.length;
//声明一个数组args
varargs=[];
//返回一个匿名函数
returnfunction(arg){
//将curryIt后面括号中的参数放入数组
args.push(arg);
//如果args中的参数个数小于fn函数的参数个数,
//则执行arguments.callee(其作用是引用当前正在执行的函数,这里是返回的当前匿名函数)。
//否则,返回fn的调用结果
if(args.length<n){
returnarguments.callee;
}elsereturnfn.apply("",args);
}
}
functioncurryIt(fn){
returnfunctiona(xa){
returnfunctionb(xb){
returnfunctionc(xc){
returnfn.call(this,xa,xb,xc);
};
};
};
}
六、数组中输出元素位置
functionindexof(arr,item){
for(vari=0,len=arr.length;i<len;i++){
varite=arr[i];
if(ite==item){
console.log(ite==item);
returni;
}else{
return-1;
}
}
}
functionindexof(arr,item){
returnarr.indexOf(item);
}
七、数组求和
functionsum(arr){
returneval(arr.join("+"));
};
八、删除给定元素
functionremove(arr,item){
for(vari=0,m=arr.length,res=[];i<m;i++){
if(item===arr[i])continue;
elseres.push(arr[i]);
}
returnres;
}
functionremove(arr,item){
varnewA=arr.slice(0);
for(vari=newA.indexOf(item);i>-1;i=newA.indexOf(item)){
newA.splice(i,1);
}
returnnewA;
}
总结
Javascript中常见的逻辑题就总结到这了,不知道大家都学会了吗?本文的内容对大家的学习或者工作还是有一定帮助的,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。