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中常见的逻辑题就总结到这了,不知道大家都学会了吗?本文的内容对大家的学习或者工作还是有一定帮助的,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。