面试常考的js题目(二)

1、

已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件:

  • 返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数)
  • 调用 a 之后,返回一个函数 b, b 的 length 属性值为 1
  • 调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
  • 调用 c 之后,返回的结果与调用 fn 的返回值一致
  • fn 的参数依次为函数 a, b, c 的调用参数
  • 例子:输入函数为 var fn = function (a, b, c) {return a + b + c};
function curryIt(fn) {

   var args = [];
   var len = fn.length;
    function inner(str){
        len--;
        args.push(str);
        if(len>=1){
             return inner;
        }else{
            return fn.apply(null,args);
        }
        
        
    }
    return inner;
}

function curryIt(fn) {
    var args=[];
    var len = fn.length;
    function inner(){
        args.push((arguments[0]||0));
        console.log(args)
        return inner;
    }
    inner.valueOf = function(){
        return fn.apply(null,args);
    }
    return inner;
}


2、给定二进制字符串,将其换算成对应的十进制数字

function base10(str) {
	return parseInt(str,2); //注意字符串转数组
}

3、将给定数字转换成二进制字符串。如果字符串长度不足 8 位,则在前面补 0 到满8位

function convertToBinary(num) {
   return ('00000000'+num.toString(2)).slice(-8)
}

4、求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题

function multiply(a, b) {
var aStr = String(a);
    var bStr = String(b);
    var pointLength = Math.max((aStr.length-aStr.indexOf('.')-1),
                               (bStr.length-bStr.indexOf('.')-1));
    return((a*Math.pow(10 ,pointLength))*(b*Math.pow(10,pointLength)pointLength))/(Math.pow(10,2*pointLength);
                               
}

5、给定一个构造函数 constructor,请完成 alterObjects 方法,将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量

function alterObjects(constructor, greeting) {
  constructor.prototype.greeting=greeting
}

6、给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false。 (分组引用)

function containsRepeatingLetter(str) {
   var pattern= /([a-zA-Z])\1/;
    return pattern.test(str);
}

7、给定字符串 str,检查其是否包含 连续3个数字 
1、如果包含,返回最新出现的 3 个数字的字符串
2、如果不包含,返回 false

function captureThreeNumbers(str) {

var reg; 
    if(reg = str.match(/(\d{3})/)){
        return reg[0]; 
    }
    else{ 
        return false; 
    }

}

8、给定字符串 str,检查其是否符合美元书写格式
1、以 $ 开始
2、整数部分,从个位起,满 3 个数字用 , 分隔
3、如果为小数,则小数部分长度为 2
4、正确的格式如:$1,023,032.03 或者 $2.03,错误的格式如:$3,432,12.12 或者 $34,344.3

function isUSD(str) {
    var reg = /^\$(\d{1,3})(,\d{3})*(\.\d{2})?$/;
    return reg.test(str);
}

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

//使用setTimeout

function count(start, end) {
    if(start <= end){
        console.log(start++);
        //start++;
        st = setTimeout(function(){count(start, end)}, 100);
    }
    return {
        cancel: function(){clearTimeout(st);}
    }
}

//使用setInterval
function count(start, end) {
    if(start <= end){
        console.log(start++);
        var st = setInterval(function(){
            if(start<=end){
                console.log(start++)
            }else{
                clearInterval(st)
            }
        },100)
    }
    return {
        cancel: function(){clearInterval(st);}
    }
}

posted @ 2018-10-11 16:06  csuwujing  阅读(369)  评论(0编辑  收藏  举报