zoukankan      html  css  js  c++  java
  • 牛客JS能力测评前20题

    1. 在数组 arr 中,查找值与 item 相等的元素出现的所有位置

    输入:findAllOccurrences('abcdefabc'.split(''), 'a').sort()
    输出:[0, 6]

    push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
    indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
    function findAllOccurrences(arr, target) {
        var arr1=[];
        var j=0;
        for(var i=0;i<arr.length;i++){
            if(arr[i]==target){
                arr1.push(arr.indexOf(arr[i],j));
                j++;
            }
        }
        return arr1;
    
    }
    

      

    2. 在Javascript语言中,声明变量使用的都是关键字var,如果不使用var而直接声明变量,则该变量为全局变量。

    3. 请修复给定的 js 代码中,函数定义存在的问题 

    输入例子:
    functions(true)
    function functions(flag) {
        if (flag) {
           return 'a';
        }
        return 'b';
    }
     
    测试通过!
    

      

    4. 修改 js 代码中 parseInt 的调用方式,使之通过全部测试用例 

    大写字母A 到Z 的值是从65 到90

    小写a到z 是从91 到 122

    字符转ascii码:用charCodeAt();
    ascii码砖字符:用fromCharCode();

    知识点 
    parseInt(string, radix)

    定义和用法

    parseInt() 函数可解析一个字符串,并返回一个整数。

    当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

    当忽略参数 radix , JavaScript 默认数字的基数如下:

    如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数(十六进制转为十进制)。
    如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
    如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
    

    看例子,是要把字符串里的数字给取出来的,当字符串为十六进制ox12时,结果并不是18,而是0;

    所以radix应该是有设置的,当设置了radix时,遇到非数字字符会直接忽略后面的字符。

    function parse2Int(num) {
        return parseInt(num,10);
    }
    

    5. 判断 val1 和 val2 是否完全等同 (考点为全等"===")

    function identity(val1, val2) {
        
        if(val1===val2){
            return true;
        }
        return false;
    
    }
    

      

    6. 实现一个打点计时器,要求
    1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
    2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
    3、第一个数需要立即输出

    ps:不是很理解

    function count(start, end) {
        //立即输出第一个值
        console.log(start++);
        var timer=setInterval(function(){
            if(start<=end){
                console.log(start++);
            }else{
                clearInterval(timer);
            }
        },100);
        //返回一个对象
        return{
            cancel:function(){
                clearInterval(timer);
            }
        };
    }
    

    console.log作用:

    主要是方便你调式javascript用的。你可以看到你在页面中输出的内容。

    相比alert他的优点是:

    1. 他能看到结构话的东西,如果是alert,淡出一个对象就是[object object],但是console能看到对象的内容。

    2. console不会打断你页面的操作,如果用alert弹出来内容,那么页面就死了,但是console输出内容后你页面还可以正常操作。

    3. console里面的内容非常丰富,你可以在控制台输入:console,然后就可看到:

    1
    Console {memory: MemoryInfo, debug: function, error: function, info: function, log: function…}

    它有网页的各种提示。

    JavaScript中的setInterval用
    setInterval动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象。可以使用本动作更新来自数据库的变量或更新时间显示。

    7. 实现 fizzBuzz 函数,参数 num 与返回值的关系如下:

    1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz
    2、如果 num 能被 3 整除,返回字符串 fizz
    3、如果 num 能被 5 整除,返回字符串 buzz
    4、如果参数为空或者不是 Number 类型,返回 false
    5、其余情况,返回参数 num 
    输入例子:
    fizzBuzz(15)
    输出例子:
    fizzbuzz
    function fizzBuzz(num) {
        if(num%3==0){
            if(num%5==0){
                return "fizzbuzz";
            }
            return "fizz";
        }else if(num%5==0){
            return "buzz";
        }else{
            if(typeof(num)!="number"){
                return false;
            }else{
                return num;
            }
        }
    }
    

      

    8.  将数组 arr 中的元素作为调用函数 fn 的参数 

    输入例子:
    argsAsArray(function (greeting, name, punctuation) {return greeting + ', ' + name + (punctuation || '!');}, ['Hello', 'Ellie', '!'])
    输出例子:
    Hello, Ellie!
    function argsAsArray(fn, arr) {
        return fn.apply(this,arr);
    }

    call方法: 
    语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 
    定义:调用一个对象的一个方法,以另一个对象替换当前对象。 
    说明: 
    call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 
    如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 

    apply方法: 
    语法:apply([thisObj[,argArray]]) 
    定义:应用某一对象的一个方法,用另一个对象替换当前对象。 
    说明: 
    如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 
    如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

    9. 删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组 

    pop() 方法用于删除并返回数组的最后一个元素。

    function truncate(arr) { 
        var arr2=new Array();
        for(var i=0;i<arr.length-1;i++){
            arr2.push(arr[i]);
        }
        return arr2;
    }
    

      

    10.  在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组 

    输入例子:
    prepend([1, 2, 3, 4], 10)
    输出例子:
    [10, 1, 2, 3, 4]
    function prepend(arr, item) {
        var arr2=new Array();
        arr2.push(item);
        for(var i=0;i<arr.length;i++){
            arr2.push(arr[i]);
        }
        return arr2;
    }
    

      

    11.  合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组 

    输入例子:
    concat([1, 2, 3, 4], ['a', 'b', 'c', 1])
    输出例子:
    [1, 2, 3, 4, 'a', 'b', 'c', 1]
    function concat(arr1, arr2) {
        var arr=new Array();
        for(var i=0;i<arr1.length;i++){
            arr.push(arr1[i]);
        }
        for(var i=0;i<arr2.length;i++){
            arr.push(arr2[i]);
        }
        return arr;
    }
    

      

    12.  在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组 

    输入例子:
    insert([1, 2, 3, 4], 'z', 2)
    输出例子:
    [1, 2, 'z', 3, 4]
    function insert(arr, item, index) {
        var arr1=new Array();
        
        for(var i=0;i<arr.length;i++){
            arr1.push(arr[i]);
            if(index-1==i){
                arr1.push(item);
            }
        }
        return arr1;
    }
    

      

    13. 统计数组 arr 中值等于 item 的元素出现的次数 

    输入例子:
    count([1, 2, 4, 4, 3, 4, 3], 4)
    输出例子:
    3
    function count(arr, item) {
        var x=0;
        for(var i=0;i<arr.length;i++){
            if(arr[i]==item){
                x++;
            }
        }
        return x;
    }
    

      

    14.  找出数组 arr 中重复出现过的元素 

    输入例子:
    duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]).sort()
    输出例子:
    [1, 3, 4]

    ps:这题答案我居然完全看不懂。。。。。

    function duplicates(arr) {
        var arr2=[];
        var obj={};
        for(var i=0,len=arr.length;i<len;i++){
            if(!obj[arr[i]]){
                obj[arr[i]]=1;
            }else{
                obj[arr[i]]++;
                if(obj[arr[i]]==2){
                    arr2.push(arr[i]);
                }
            }
        }
        return arr2;
    }
    

    这个方法好懂一些,好6

    function duplicates(arr) {
        var result=[];
        arr.forEach(function(elem){
           if(arr.indexOf(elem)!=arr.lastIndexOf(elem)&&result.indexOf(elem)==-1){
               result.push(elem);
           } 
        });
        return result;
    }
    

      

    sort() 方法用于对数组的元素进行排序。

    发现一个厉害的答题方法:http://blog.csdn.net/u014787301/article/details/52206260

    15.  为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组 

    输入例子:
    square([1, 2, 3, 4])
    输出例子:
    [1, 4, 9, 16]
    function duplicates(arr) {
        var arr2=[];
        var obj={};
        for(var i=0,len=arr.length;i<len;i++){
            if(!obj[arr[i]]){
                obj[arr[i]]=1;
            }else{
                obj[arr[i]]++;
                if(obj[arr[i]]==2){
                    arr2.push(arr[i]);
                }
            }
        }
        return arr2;
    }
    

      

    16. 计算给定数组 arr 中所有元素的总和 

    输入描述:
    数组中的元素均为 Number 类型
    输入例子:
    sum([ 1, 2, 3, 4 ])
    输出例子:
    10
    ps这个参考的方法啦,用时179s
    function sum(arr) {
        var su=0;
        arr.forEach(function(value,index,arr){
            su+=value;
        });
        return su;
    }
    

    呜呼,我的要233s,弱爆了。。。。。

    function sum(arr) {
        var su=0;
        for(var i=0;i<arr.length;i++){
            su=arr[i]+su;
        }
        return su;
    }
    

      

    17.  移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组 

    输入例子: 
    remove([1, 2, 3, 4, 2], 2)

    输出例子: 
    [1, 3, 4]

    ps:这个方法,反正我是想不出来的

    function remove(arr, item) {
        return arr.filter(function(d){
            return d !== item;
        })
    }
    

    18. 移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回 

    输入例子:
    removeWithoutCopy([1, 2, 2, 3, 4, 2, 2], 2)
    输出例子:
    [1, 3, 4]
    function removeWithoutCopy(arr, item) {
        for(var i=0;i<arr.length;i++){
            if(arr[i]==item){
                arr.splice(i,1);
                i--;
            }
        }
        return arr;
    
    }
    

    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。

    注释:该方法会改变原始数组。

    19. 在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组 

    输入例子:
    append([1, 2, 3, 4],  10)
    输出例子:
    [1, 2, 3, 4, 10]
    function append(arr, item) {
        return [].concat(arr,item);
    }
    

      

    20. 将函数 fn 的执行上下文改为 obj 对象 

    输入例子:
    speak(function () {return this.greeting + ', ' + this.name + '!!!';}, {greeting: 'Hello', name: 'Rebecca'})
    输出例子:
    Hello, Rebecca!!!
    function speak(fn, obj) {
        return fn.call(obj);
    
    }
    

      

  • 相关阅读:
    return 与 exit() 的区别
    RtlInitUnicodeString
    计算机网络 学习笔记-概论
    STM32学习笔记(五) USART异步串行口输入输出(轮询模式)
    STM32学习笔记(四) RCC外设的学习和理解
    简单RTOS学习(一) uc/os-II 工程模板建立
    web前端学习(一) html+js实现文本框背景及只读属性修改
    TCP/IP协议学习(一) LWIP实现网络远程IAP下载更新
    STM32学习笔记(三) STM32的GPIO的深入学习
    STM32学习笔记(二) 基于STM32-GPIO的流水灯实现
  • 原文地址:https://www.cnblogs.com/liao13160678112/p/7050866.html
Copyright © 2011-2022 走看看