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 相关文章推荐
ExtJs事件机制基本代码模型和流程解析
Oct 24 Javascript
各情景下元素宽高的获取实现代码
Sep 13 Javascript
js弹出层之1:JQuery.Boxy (二)
Oct 06 Javascript
JavaScript初学者应注意的七个细节详细介绍
Dec 27 Javascript
js怎么覆盖原有方法实现重写
Sep 04 Javascript
JQuery勾选指定name的复选框集合并显示的方法
May 18 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
Sep 01 Javascript
jquery实现简单的全选和反选功能
Jan 02 Javascript
在React框架中实现一些AngularJS中ng指令的例子
Mar 06 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
Oct 09 Javascript
webpack搭建vue 项目的步骤
Dec 27 Javascript
JavaScript Image对象实现原理实例解析
Aug 26 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
PHP 柱状图实现代码
2009/12/04 PHP
php实现头像上传预览功能
2017/04/27 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
详解Python多线程
2016/11/14 Python
python编写弹球游戏的实现代码
2018/03/12 Python
python 删除非空文件夹的实例
2018/04/26 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
Python 解析简单的XML数据
2020/07/24 Python
python自动化发送邮件实例讲解
2021/01/04 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
英国现代绅士品牌:Hackett
2017/12/17 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
财务人员个人求职信范文
2013/12/04 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
委托书格式要求
2015/01/28 职场文书
高三化学教学反思
2016/02/22 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis