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 相关文章推荐
快速排序 php与javascript的不同之处
Feb 22 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
javascript搜索框效果实现方法
May 14 Javascript
JavaScript获得url查询参数的方法
Jul 02 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
Sep 14 Javascript
Bootstrap每天必学之折叠(Collapse)插件
Apr 25 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
Feb 06 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
Mar 08 Javascript
完美实现js选项卡切换效果(二)
Mar 08 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
Sep 10 Javascript
Angular 4中如何显示内容的CSS样式示例代码
Nov 06 Javascript
对vuex中getters计算过滤操作详解
Nov 06 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
第二节--PHP5 的对象模型
2006/11/16 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
2020/07/24 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
Python Grid使用和布局详解
2018/06/30 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
python Shapely使用指南详解
2020/02/18 Python
Django 解决由save方法引发的错误
2020/05/21 Python
瑞典领先的汽车零部件网上零售商:bildelaronline24.se
2017/01/12 全球购物
开放系统互连参考模型
2016/06/29 面试题
单位委托书范本
2014/04/04 职场文书
小学生感恩演讲稿
2014/04/25 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python