zoukankan      html  css  js  c++  java
  • 解Tom大叔出的Javascript题目

    原文参考,http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html

    Tom大叔的博客深入理解Javascript系列真是我们学习Javascript的领航明灯, http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html

    有兴趣的朋友自己去学习下吧. 一下是对他出的6到题的解答.

    第一题:找出数字数组中最大的元素(使用Match.max函数)

    原本的我答案是这样

    function getMax(array) {
    var max= array[0];
    array.forEach(function(element){
    max<element?max=element:max;
    });
    return max;
    }
    var arr = [12, 5, 8, 130, 44,99,888];
    console.log(getMax(arr)); //888

    看到提示,查了Match.max文档 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/max

    发现其实只要这样就可以了.

    var arr = [12, 5, 8, 130, 44,99,888];
    console.log(Math.max.apply(null, arr));

    其实这题是考的apply的用法和平时多api文档是否熟悉.要熟悉应该是非常简单旳.

    第二题:转化一个数字数组为function数组(每个function都弹出相应的数字)

    function NumberToFunction(arr){
        var funarr = [];
        arr.forEach(convert);
        function convert(element,index,array){
            function log(element){
               return function(){console.log(element);};
            }
             funarr.push(log(element));
        }
        return funarr;
    }
    
    var arr = [12, 5, 8, 130, 44,99,888];
    var funa = NumberToFunction(arr);
    //验证结果
    funa.forEach(function(elment){
        elment.call();
    });

    这道题我理解是考closures的概念,就是闭包. 有两点要注意

    1. 循环中不能使用闭包 所以创建了function convert.

    2. push里如果要接受convert的参数element不能使用闭包. 所有又添加了function log. 否则虽然可以创建function数组,但是数组里打印不出结果.

     第三题: 给object数组进行排序(排序条件是每个元素对象的属性个数)

    var persons = [
        {
            name: 'Jason',
            age: 20,
            gender:'male'
        },
    
        {
            name: 'Tom',
            age: 18
        },
    
        {
            name: 'May',
            age: 18,
            gender: 'female',
            high: '165cm'
        }
    ];
    
    persons.sort(function(a,b){
        if(Object.getOwnPropertyNames(a).length >Object.getOwnPropertyNames(b).length){
            return 1;
        }
        if(Object.getOwnPropertyNames(a).length<Object.getOwnPropertyNames(b).length){
            return -1;
        }
        return 0;
    });
    
    console.log(persons);

    Object.keys().length也可以.考api常识 Array.sort,Object.getOwnPropertyNames()或Object.keys()

    第四题: 利用JavaScript打印出Fibonacci数(不使用全局变量)

    function PFibonacci(){
        var arrFib = [0,1];
        var count = arguments[0]?arguments[0]:10;
        return {
            print:function(){
                console.log(arrFib[0]);
                console.log(arrFib[1]);
                for(var i = 2; i< count;i++){
                    arrFib[i] = arrFib[i-1] + arrFib[i-2];
                    console.log(arrFib[i] );
                }
            }
        }
    }
    
    PFibonacci(20).print();

    第五题:实现如下语法的功能:var a = (5).plus(3).minus(6);

    Number.prototype.plus= function(x){
        return this + x;
    };
    
    Number.prototype.minus = function(x){
        console.log(this);
        return this - x;
    };
    console.log((5).plus(3).minus(6)); //2

    考prototype的用法.

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

    var add = function (){
        var x = arguments[0];
        return function(){
            x += arguments[0];
            return function(){
                return x += arguments[0];
            }
        };
    };
    console.log(add(2)(3)(4));//9

    这题很纠结,想写出一个add()()()(...),无限下去的方法失败. 只能固定3重连加了.

  • 相关阅读:
    复合词 (Compund Word,UVa 10391)
    卡片游戏 (Throwing card away I,UVa10935)
    交换学生 (Foreign Exchange,UVa10763)
    Ducci序列 (Ducci Sequence,ACM/ICPC Seoul 2009,UVa1594)
    代码对齐 (Alignment of Code,ACM/ICPC NEERC 2010,UVa1593)
    打印队列 (Printer Queue,ACM/ICPC NWERC 2006,UVA12100)
    更新字典 (Updating a Dictionary,UVa12504)
    golang 定时弹出对话框
    重新梳理一下adb操作app(golang版)
    通过无线网络使用ADB ( Connect to android with ADB over TCP )
  • 原文地址:https://www.cnblogs.com/dangkei/p/4977022.html
Copyright © 2011-2022 走看看