资讯专栏INFORMATION COLUMN

JS笔试题分析(1)

Markxu / 1041人阅读

摘要:要求只能在指定的位置填写自己的代码,本文件里的其他代码不能修改所有题目都不允许添加全局变量名本文件应该能在的里正常执行,并输出结果代码最优化,效率最高代码注释明确答题开始答题结束执行结果

要求:
1、只能在指定的位置填写自己的代码,本文件里的其他代码不能修改
2、所有题目都不允许添加全局变量名
3、本文件应该能在firebug的console里正常执行,并输出结果
4、代码最优化,效率最高
5、代码注释明确

var each = function(obj,fn){
       //答题开始
    
       //答题结束
}   
try{
        var data1 = [4,5,6,7,8,9,10,11,12];
        var data2 = {
                "a": 4,
                "b": 5,
                "c": 6
        };
        console.group(data1);
        
        each(data1, function(o){
            if( 6 == this )
                return true;
            else if( 8 == this )
                return false;
            console.log(o + ": "" + this + """);
        });
        console.groupEnd();
        /*------[执行结果]------
        1: "4"
        2: "5"
        4: "7"
        ------------------*/
        console.group(data2);
        each(data2, function(v, n){
                if( 5 == this )
                        return true;
                console.log(n + ": "" + v + """);
        });
        console.groupEnd();
        /*------[执行结果]------
        a: "4"
        c: "6"
        ------------------*/
}catch(e){
        console.error("执行出错,错误信息: " + e);
}

今天就来解决并且讲解下上面这道题

var each = function(obj,fn){
    for(var key in obj){
    /*首先遍历下函数的一个参数obj,也就是data1和data2.为什么要选择for,in循环呢?因为它既能遍历数组data1,又能遍历字典(json)data2.*/
        var value = obj[key];
    /*这边要了解到value,key分别是什么东西。在data1传入的时候value是数组中各个元素,key是数组的索引。在data2传入的时候value是值(4,5,6),key是属性(a,b,c).*/
        fn1 = fn.bind(value);
    /*这行代码为了第一道题所创建.根据题目console.log(o + ":" "" + this + """);希望输出的是1:"4"  2:"5" 4:"7"; 从题目输出的要求可以看出前面是数组的索引值,虽然对应的值好像整体少了1.还可以看出o对应索引,this对应数组的元素.因为o能直接获取到(key),this的话需要添加data1才能获取到,因此我们用了bind()函数,bind函数第一个参数就是添加元素到指定函数里,指向**this**.把value添加到fn里面然后赋值给fn1.*/
        if(!isNaN(key)){
        /*如果key是数字的话,执行以下代码*/
            var r = fn1(++key);
            /*这里的fn1就是上面代码中fn绑定value(data1数组元素)后的函数,函数里面传了个参数++key。我们都知道key是索引,但是为什么要前面写上++呢,细心的朋友发现了,因为答案的索引值比实际索引值要多1.代码到这边,输出下r试试,r会把所有的索引值和对应的data1元素都给输出,还能发现除了数组元素6是返回true和8是返回false,其他都是undefined.*/
               if(r === false){                 
                break;
            /*因为想要执行结果为1:"4" 2:"5" 4:"7",也就是不要包括数组元素8和对应的索引值+1后面的值.根据已有的代码当数组元素是8时返回false,只要当r恒等于false就停止后面的输出.这边已经是满足第一题的答案要求了,那为什么数组元素少了个6呢,细心的朋友已经发现了,因为当数组元素等于6时,直接返回true了.*/
            }    
         }
        else{
        /*如果key不是数字,执行下面这段代码.*/
           fn1(value,key);
           /*看console.log(n + ": "" + v + """),想要执行的结果为a:"4",c:"6".左边的属性便是key,对应参数n.右边的属性值便是value,对应参数v.直接调用传入参数就好了.*/
        };
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81661.html

相关文章

  • JS笔试分析(2)

    摘要:开始解题创建个空字符串,储存输出的内容把传入的参数用分割,获取第二部分,也就是后面的字符串创输出数组中的元素把号后面的字符串用分割实际上就分割段,不做分割把前面的字符串用分割,最高允许分割段。 要求:1、只能在指定的位置填写自己的代码,本文件里的其他代码不能修改2、所有题目都不允许添加全局变量名3、本文件应该能在firebug的console里正常执行,并输出结果4、代码最优化,效率最...

    XanaHopper 评论0 收藏0
  • 一次前端笔试总结

    摘要:另外,原题还有字数限制的,只有在字数小于并且结果正确时才可以满分。插入节点操作的可以使用和方法,随便用一个都行。但是,这题有两个限制条件优雅的方式前个元素。 1.有一个长度未知的数组a,如果它的长度为0就把数字1添加到数组里面,否则按照先进先出的队列规则让第一个元素出队。 分析:这道题主要是考核了数组的队列方法和栈方法。另外,原题还有字数限制的,只有在字数小于30并且结果正确时才可以满...

    jsdt 评论0 收藏0
  • 一次前端笔试总结

    摘要:另外,原题还有字数限制的,只有在字数小于并且结果正确时才可以满分。插入节点操作的可以使用和方法,随便用一个都行。但是,这题有两个限制条件优雅的方式前个元素。 1.有一个长度未知的数组a,如果它的长度为0就把数字1添加到数组里面,否则按照先进先出的队列规则让第一个元素出队。 分析:这道题主要是考核了数组的队列方法和栈方法。另外,原题还有字数限制的,只有在字数小于30并且结果正确时才可以满...

    GitChat 评论0 收藏0
  • 一次前端笔试总结

    摘要:另外,原题还有字数限制的,只有在字数小于并且结果正确时才可以满分。插入节点操作的可以使用和方法,随便用一个都行。但是,这题有两个限制条件优雅的方式前个元素。 1.有一个长度未知的数组a,如果它的长度为0就把数字1添加到数组里面,否则按照先进先出的队列规则让第一个元素出队。 分析:这道题主要是考核了数组的队列方法和栈方法。另外,原题还有字数限制的,只有在字数小于30并且结果正确时才可以满...

    honhon 评论0 收藏0
  • 你不能错过的前端面试合集

    摘要:收集的一些前端面试题从面试题发现不足,进而查漏补缺,比通过面试更难得及各大互联网公司前端笔试面试题篇及各大互联网公司前端笔试面试题篇面试题个和个经典面试题前端开发面试题如何面试前端工程师很重要个变态题解析如何通过饿了么面试轻 收集的一些前端面试题 从面试题发现不足,进而查漏补缺,比通过面试更难得 1 BAT及各大互联网公司2014前端笔试面试题--Html,Css篇 2 BAT...

    ninefive 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<