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 相关文章推荐
document.all与WEB标准
May 13 Javascript
javascript列表框操作函数集合汇总
Nov 28 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
Jan 23 Javascript
js给网页加上背景音乐及选择音效的方法
Mar 03 Javascript
javascript将DOM节点添加到文档的方法实例分析
Aug 04 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
Sep 07 Javascript
BootStrap Validator使用注意事项(必看篇)
Sep 28 Javascript
JS调用Android、Ios原生控件
Jan 06 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
Mar 07 Javascript
完美实现js焦点轮播效果(一)
Mar 07 Javascript
解析vue路由异步组件和懒加载案例
Jun 08 Javascript
详解webpack 热更新优化
Sep 13 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 mysql 判断update之后是否更新了的方法
2012/01/10 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
总结一些js自定义的函数
2006/08/05 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
悬浮数字的实现案例
2014/02/19 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
Django Admin 实现外键过滤的方法
2017/09/29 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
Python requests模块session代码实例
2020/04/14 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
Python中如何定义一个函数
2016/09/06 面试题
业务员岗位职责
2013/11/16 职场文书
运动会通讯稿150字
2014/02/15 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
校园安全学习心得体会
2016/01/18 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python