Javascript中常见的逻辑题和解决方法


Posted in Javascript onSeptember 17, 2016

一、统计数组 arr 中值等于 item 的元素出现的次数

function count(arr, item) {
   var count = 0;
   arr.forEach(function(e){
     //e为arr中的每一个元素,与item相等则count+1
     e == item ? count++ : 0;
   });
   return count;
 }

function count(arr, item) {
  return arr.filter(function(a){
    return (a==item);
  }).length
}

function count(arr, item) {
var res;
return (res = arr.toString().match(new RegExp("//b"+item+"//b","g")))?res.length:0;
}

function count(arr, item) {
      var count = 0;
      arr.map(function(a) {
        if(a === item) {
          count++;
        }
      });
      return count;
    }

二、为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组

function square(arr) {
  return arr.map(function(item,index,array){
    return item*item;
  })
}

function square(arr) {
  //声明一个新的数组存放结果
   var a = [];
   arr.forEach(function(e){
     //将arr中的每一个元素求平方后,加入到a数组中
     a.push(e*e);
   });
   return a;
 }

function square(arr) {
//复制一个arr数组
  var newarr = arr.slice(0);
  for (var i=0;i<newarr.length;i++){
    newarr[i]= newarr[i]* newarr[i];
  }
  return newarr;
}

function square(arr) {
  return arr.map(function(item){
    return Math.pow(item, 2);
  })
}

三、将数组 arr 中的元素作为调用函数 fn 的参数

function argsAsArray(fn, arr) {
 return fn.apply(this, arr);
 }

function argsAsArray(fn, arr) {
  return function(para1,para2){ 
    return para1.apply(this,para2);
  }(fn,arr);
}

四、完成函数 createModule,调用之后满足如下要求:

     1、返回一个对象

     2、对象的 greeting 属性值等于 str1,name 属性值等于 str2

     3、对象存在一个 sayIt 方法,该方法返回的字符串为 greeting属性值 + ‘, ‘ +name属性值

function createModule(str1, str2) {
   var obj = {
     greeting : str1,
     name   : str2,
     sayIt  : function(){
       //两个属性前面都需要加上this
       return this.greeting+", "+this.name;
     }
   };
   return obj;
 }

//使用构造函数法
function createModule(str1, str2) {
  function Obj(){
    this.greeting = str1;
    this.name = str2;
    this.sayIt = function(){
      return this.greeting + ', ' + this.name;
    };
  }
  return new Obj();
}

//构造函数与原型组合
function createModule(str1, str2) {
  function CreateMod(){
    this.greeting = str1;
    this.name = str2;
  }
  CreateMod.prototype.sayIt = function(){
    return this.greeting + ', ' + this.name;
  }
  return new CreateMod();
}

五、已知 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 的调用参数

输入例子:

var fn = function (a, b, c) {return a + b + c}; curryIt(fn)(1)(2)(3);
function curryIt(fn) {
   //获取fn参数的数量
   var n = fn.length;
   //声明一个数组args
   var args = [];
   //返回一个匿名函数
   return function(arg){
     //将curryIt后面括号中的参数放入数组
     args.push(arg);
     //如果args中的参数个数小于fn函数的参数个数,
     //则执行arguments.callee(其作用是引用当前正在执行的函数,这里是返回的当前匿名函数)。
     //否则,返回fn的调用结果
     if(args.length < n){
      return arguments.callee;
     }else return fn.apply("",args);
   }
 }

function curryIt(fn) {
  return function a(xa){
    return function b(xb){
      return function c(xc){
        return fn.call(this,xa,xb,xc);
      };
    };
  };
}

六、数组中输出元素位置

function indexof(arr,item){
  for(var i = 0,len = arr.length;i<len;i++){
    var ite = arr[i];
    if(ite == item){
      console.log(ite == item);
      return i;
    }else{
      return -1;
    }
  }
}

function indexof(arr,item){
  return arr.indexOf(item);
}

七、数组求和

function sum(arr) {
  return eval(arr.join("+"));
};

八、删除给定元素

function remove(arr, item) {
    for(var i=0, m=arr.length, res=[]; i<m; i++){
      if(item === arr[i]) continue;
      else res.push(arr[i]);
    }
    return res;
  }

function remove(arr, item) {
  var newA=arr.slice(0);
  for(var i=newA.indexOf(item);i>-1;i=newA.indexOf(item)){
    newA.splice(i,1);
  }
  return newA;
}

总结

Javascript中常见的逻辑题就总结到这了,不知道大家都学会了吗?本文的内容对大家的学习或者工作还是有一定帮助的,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
html中的input标签的checked属性jquery判断代码
Sep 19 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
Oct 11 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
Feb 10 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
Oct 09 Javascript
关于JS中的方法是否加括号的问题
Jul 27 Javascript
jQuery实现所有验证通过方可提交的表单验证
Nov 21 jQuery
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 jQuery
vue通过路由实现页面刷新的方法
Jan 25 Javascript
javascript回调函数详解
Feb 06 Javascript
Angular 5.x 学习笔记之Router(路由)应用
Apr 08 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
Sep 21 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
Dec 12 Javascript
js手动播放图片实现图片轮播效果
Sep 17 #Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
Sep 17 #Javascript
AngularJS使用自定义指令替代ng-repeat的方法
Sep 17 #Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
Sep 17 #Javascript
AngularJS中关于ng-class指令的几种实现方式详解
Sep 17 #Javascript
AngularJS中过滤器的使用与自定义实例代码
Sep 17 #Javascript
利用js编写响应式侧边栏
Sep 17 #Javascript
You might like
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
JS实现微信里判断页面是否被分享成功的方法
2017/06/06 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
Python将字典转换为XML的方法
2020/08/01 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
医学类导师推荐信范文
2013/11/19 职场文书
竞争上岗演讲稿
2014/01/05 职场文书
施工安全生产承诺书
2014/05/23 职场文书
课例研修方案
2014/05/31 职场文书
外贸业务员求职信
2014/06/16 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python