汤姆大叔的6道javascript编程题题解

看汤姆大叔的博文,其中有篇(猛戳这里)的最后有6道编程题,于是我也试试,大家都可以先试试。

1、找出数字数组中最大的元素(使用Math.max函数)


  1. var a = [1, 2, 3, 6, 5, 4]; 
  2. var ans = Math.max.apply(null, a); 
  3. console.log(ans);  // 6 

这题很巧妙地用了apply,如果不是数组,是很多数字求最大值,我们知道可以这样:


  1. var ans = Math.max(1, 2, 3, 4, 5, 6); 
  2. console.log(ans); // 6 

而apply的第二个参数正是一个数组,都不用进行转换了。


  1. var a = [1, 2, 3, 6, 5, 4]; 
  2. var ans = eval( 'Math.max(' + a.toString() + ')'); 
  3. console.log(ans); // 6 

还有一种用eval+toString的实现:

2、转化一个数字数组为function数组(每个function都弹出相应的数字)


  1. var a = [1, 2, 3, 4, 5, 6]; 
  2. var len = a.length; 
  3. for(var i = 0; i < len; i++) { 
  4.   var num = a[i]; 
  5.   (function(num) { 
  6.     var f = function() { 
  7.       console.log(num); 
  8.     }; 
  9.     a[i] = f; 
  10.   })(num); 
  11.   
  12. for(var i = 0; i < len; i++) 
  13.   a[i](); 
  14. // 1 
  15. // 2 
  16. // 3 
  17. // 4 
  18. // 5 
  19. // 6 

我觉得这跟给n个a标签,弹出相应标签对应的编号是一个类型的题,用闭包保存变量到内存即可。

3、给object数组进行排序(排序条件是每个元素对象的属性个数)


  1. var a = { 
  2.   name: 'hanzichi', 
  3.   age: 10, 
  4.   location: 'china' 
  5. }; 
  6.   
  7. var b = { 
  8.   name: 'curry' 
  9. }; 
  10.   
  11. var c = { 
  12.   name: 'kobe', 
  13.   sex: 'male' 
  14. }; 
  15.   
  16. Object.prototype.getLength =  function() { 
  17.   var num = 0; 
  18.   for(var key in this) { 
  19.     if(this.hasOwnProperty(key)) 
  20.       num++; 
  21.   } 
  22.   return num; 
  23. }; 
  24.   
  25. var arr = [a, b, c]; 
  26. arr.sort(function(a, b) { 
  27.   return a.getLength() > b.getLength(); 
  28. }); 
  29. console.log(arr); 

这题不难,数组排序,当然是sort,排序条件是对象的属性个数,可以写个函数计算,注意可能要用hasOwnProperty判断下。

4、利用JavaScript打印出Fibonacci数(不使用全局变量)


  1. (function(a, b) { 
  2.   var c = a + b; 
  3.   console.log(c); 
  4.   if(c > 100) return; 
  5.   arguments.callee(b, c); 
  6. })(-1, 1); 

这题没看明白,是打出斐波那契数列的前n项么?还是第n项...


  1. function fn(n) { 
  2.   var a = []; 
  3.   a[0] = 0, a[1] = 1; 
  4.   for(var i = 2; i < n; i++) 
  5.     a[i] = a[i - 1] + a[i - 2]; 
  6.   for(var i = 0; i < n; i++) 
  7.     console.log(a[i]); 
  8.   
  9. fn(5); // 10表示需要的斐波那契数列个数 
  10. // 0 
  11. // 1 
  12. // 1 
  13. // 2 
  14. // 3 

不使用全局变量,我把它们写在函数里了应该算是局部变量了吧,难道这样就好了?你怎么看?

5、实现如下语法的功能:var a = (5).plus(3).minus(6); //2


  1. Number.prototype.plus = function(a) { 
  2.   return this + a; 
  3. }; 
  4.   
  5. Number.prototype.minus = function(a) { 
  6.   return this - a; 
  7. }; 
  8.   
  9. var a = (5).plus(3).minus(6); 
  10. console.log(a); // 2 

直接在Number对象上加扩展方法即可,传说中这样很不好,but我也想不到更好的办法了...

6、实现如下语法的功能:var a = add(2)(3)(4); //9


  1. function add(a) { 
  2.   var temp = function(b) { 
  3.     return add(a + b); 
  4.   } 
  5.   temp.valueOf = temp.toString = function() { 
  6.     return a; 
  7.   }; 
  8.   return temp; 
  9. var ans = add(2)(3)(4); 
  10. console.log(ans); // 9 

对valueOf和toString的考察,具体可以参考《valueOf和toString》

另看到一种很飘逸的写法(来自Gaubee):


  1. function add(num){ 
  2.   num += ~~add; 
  3.   add.num = num; 
  4.   return add; 
  5. add.valueOf = add.toString = function(){return add.num}; 
  6. var ans = add(3)(4)(5)(6);  // 18 
  7. alert(ans); 

大家有什么意见建议的欢迎交流指导~

来源:51CTO

时间: 2024-10-31 12:46:15

汤姆大叔的6道javascript编程题题解的相关文章

百度WEB前端JavaScript编程题和HTML/CSS面试题

文章简介:笔试题,百度流程信息管理部Web前端实习研发工程师. 笔试题,百度流程信息管理部Web前端实习研发工程师. JavaScript编程题1.实现输出document对象中所有成员的名称和类型:2.如何获得一个DOM元素的绝对位置?(获得元素位置,不依赖框架)3.如何利用JS生成一个table?4.实现预加载一张图片,加载完成后显示在网页中并设定其高度为50px,宽度为50px:5.假设有一个4行td的table,将table里面td顺序颠倒:6.模拟一个HashTable类,包含有add

c-一道离散数学编程题,求解答

问题描述 一道离散数学编程题,求解答 编程实现由偏序集合构造全序集合,最好能用C或C++编写,谢谢了 解决方案 你首先应该先解释一下什么是偏序集合,什么是全序集合,说清楚才有可能别人帮你! 解决方案二: 听上去说的文绉绉的,其实无非就是实现一个带排序的集合,再说得通俗一些,就是插入排序. 解决方案三: 直接把所有内容插入到set中,不就自动排序了吗?当然如果可以用库函数非要求必须自己编写.

格温妮丝-帕特洛盛赞汤姆-克鲁斯吻技高超(图)

格温妮丝-帕特洛和汤姆-克鲁斯 新浪娱乐讯 北京时间1月6日消息,据国外媒体报道,与好莱坞女星格温妮丝-帕特洛(Gwyneth Paltrow)在银幕上搭档过的性感男星不计其数,其中还包括了像裘德-洛(Jude Law)和布拉德-皮特(Brad Pitt)这种无数人心目中的梦中情人.但毫无疑问这位奥斯卡影后将自己最喜欢的头衔给了汤姆-克鲁斯(Tom Cruise),她在参加一个脱口秀节目时盛赞克鲁斯吻技高超. 节目中赞汤姆-克鲁斯是"接吻高手" "我曾经在<王牌大贱谍3

汤姆-克鲁斯空降新浪微博刷屏答谢粉丝(图)

汤姆·克鲁斯是目前为止在中国微博上最大牌的外国明星,上图是他在Twitter上宣布此事的截图 新浪微博截图 好莱坞明星汤姆·克鲁斯 好莱坞明星汤姆·克鲁斯新浪微博地址:点击进入 南都讯 记者吴莎 继"宅男"女神苍井空之后,又一个外国大腕儿来中国开微博了!这回是更加大牌的好莱坞明星汤姆·克鲁斯.在自己官方Twitter上,阿汤哥团队第一时间宣布了自己在中国开微博的消息.他贴出自己在新浪微博的地址,表示自己很高兴和粉丝尤其是中国的新朋友们在微博交流. 首条中文微博:疑似软件翻译 阿汤哥的微

c语言-两道C语言编程题:求教各位大神

问题描述 两道C语言编程题:求教各位大神 两元一瓶啤酒,两个啤酒瓶换一瓶啤酒,四个啤酒瓶盖换一瓶啤酒,输入的金额可以买几瓶. 输入一串字符串,写两个函数,第一个函数使输入的字符串全都后移一位,第二个函数将字符串中的字母大写换小写,小写换大写?. 拜托各位了 谢谢~ 解决方案 第一个问题描述不清,不知道是不是可以借啤酒瓶和瓶盖,我的程序按照不可以编写: #include <stdio.h>int foo(int money){ int c = money / 2; int c1 = 0; int

android汤姆猫怎么点击各个身体部分实现各个动作求大神解答新手

问题描述 android汤姆猫怎么点击各个身体部分实现各个动作求大神解答新手 汤姆猫怎么点击各个身体部分实现各个动作汤姆猫怎么点击各个身体部分实现各个动作汤姆猫怎么点击各个身体部分实现各个动作汤姆猫怎么点击各个身体部分实现各个动作 解决方案 根据点击的位置不同,播放不同的动画就行了

深入理解JavaScript编程中的同步与异步机制

  这篇文章主要介绍了深入理解JavaScript编程中的同步与异步机制,不仅仅是AJAX已经深入到了各个角落,Node.js的火爆也让JS的异步编程格外引人注目,需要的朋友可以参考下 JavaScript的优势之一是其如何处理异步代码.异步代码会被放入一个事件队列,等到所有其他代码执行后才进行,而不会阻塞线程.然而,对于初学者来说,书写异步代码可能会比较困难.而在这篇文章里,我将会消除你可能会有的任何困惑. 理解异步代码 JavaScript最基础的异步函数是setTimeout和setInt

面向对象的JavaScript编程及其 Scope 处理

本文首先对 JavaScript 的机制进行讲解,并结合当前流行的开源 JavaScript 框架讲解如何在 JavaScript 中实现面向对象和继承机制:之后本文将对面向对象 JavaScript 编程中容易引起误解和 Scope 的几个问题做详细阐述:最后针对面向对象的 JavaScript 编程中的 Scope 问题给出几点建议. 面向对象和模拟继承 JavaScript 是一种弱类型解释运行的脚本语言,就语言本身来讲它不是一门面向对象语言.但是我们可以利用一些语言的特性来模拟面向对象编

Javascript编程语言和DOM接口系列教程(1)

Hello,今天开始彬Go将以系列教程的方式为大家讲解Javascript编程语言和DOM接口,本篇教程为该系列的第一部分. 虽然现在一些js框架诸如jQuery.Prototype和MooTools能提高我们的前端开发效率而且很好的解决了浏览器兼容性问题,但我们仍要打好javascript技术基础.Javascript DOM 控制系列教程将告诉你你需要了解的javascript和文档对象模型(DOM)的本质. 引言 JavaScript JavsScript是可以在各种不同环境下使用的动态的