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

2024-05-09 12:18

本文主要是介绍汤姆大叔的6道javascript编程题题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

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

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

 
  1. var ans = Math.max(123456); 
  2. console.log(ans); // 6 

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

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

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

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

 
  1. var a = [123456]; 
  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 > 100return
  5.   arguments.callee(b, c); 
  6. })(-11); 

这题没看明白,是打出斐波那契数列的前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); 

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

这篇关于汤姆大叔的6道javascript编程题题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973390

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor