牛客网js题库正解(41-60)

41、dom 节点查找
function commonParentNode(oNode1, oNode2) {
    for(;oNode1;oNode1 = oNode1.parentNode) {
        console.log(oNode1)
        if (oNode1.contains(oNode2)) {
            return oNode1
        }
    }
}
42、41直接跳到43,没有42题
43、修改this指向
function bindThis(f, oTarget) {
    return f.bind(oTarget)
}
44、根据包名,在指定空间中创建对象
function namespace(oNamespace, sPackage) {
    const arr = sPackage.split('.');
    let tem = oNamespace;
    arr.forEach(item => {
        const flag = tem[item] instanceof Object
        if(!flag) {
            tem[item] = {};
            tem = tem[item]
        } else {
            tem = tem[item]
        }
    })
    return oNamespace
}
45、数组去重
Array.prototype.uniq = function () {
    return [...(new Set(this))]
}
46、斐波那契数列
function fibonacci(n) {
    if(n > 0) {
        if(n ===1 || n === 2) {
            return 1
        }else {
            return fibonacci(n - 1 ) + fibonacci(n - 2)
        }
    }
}
47、时间格式化输出
function formatDate(t,str){
    var obj = {
    yyyy:t.getFullYear(),
    yy:(""+ t.getFullYear()).slice(-2),
    M:t.getMonth()+1,
    MM:("0"+ (t.getMonth()+1)).slice(-2),
    d:t.getDate(),
    dd:("0" + t.getDate()).slice(-2),
    H:t.getHours(),
    HH:("0" + t.getHours()).slice(-2),
    h:t.getHours() % 12,
    hh:("0"+t.getHours() % 12).slice(-2),
    m:t.getMinutes(),
    mm:("0" + t.getMinutes()).slice(-2),
    s:t.getSeconds(),
    ss:("0" + t.getSeconds()).slice(-2),
    w:['日', '一', '二', '三', '四', '五', '六'][t.getDay()] 
    };
    return str.replace(/([a-z]+)/ig,function($1){return obj[$1]})
}
48、获取字符串长度
function strLength(s, bUnicode255For1) {
    let size = s.length;
    if(bUnicode255For1) return size;
    for(let i = 0; i < s.length; i++) {
        if(s.charCodeAt(i) > 255) size++;
    }
    return size;
}
49、邮箱字符串判断
function isAvailableEmail(sEmail) {
    let reg = /^([\w+\.])+@(\w+)([.]\w+)+$/
    return reg.test(sEmail)
}
50、计数
function count(arr, item) {
    var j=0;
    arr.forEach(function(e){
        if(e==item)
            j++;
    });
    return j;
}
51、查找重复元素
function duplicates(arr) {
var newArr =[]
        for(var i =0 ;i<arr.length; i++){
          for(var j=i+1;j<arr.length;j++){
              if(arr[i]==arr[j]&&newArr.indexOf(arr[i])==-1){
                newArr.push(arr[i]) 
              }
          }
        }
        return newArr
}
52、计时器
function count(start, end) {
    if(start <= end){
        console.log(start);
        start++;
        st = setTimeout(function(){count(start, end)}, 100);
    }
    return {
        cancel: function(){clearTimeout(st);}
    }
}
53、流程控制
function fizzBuzz(num) {
    if(num%3===0 && num%5===0){
        return 'fizzbuzz';
    }else if(num%3===0 && num%5!==0){
        return 'fizz';
    }else if(num%5===0 && num%3!==0){
        return 'buzz';
    }else if(num===null || typeof(num)!== 'number'){
        return false;
    }else{
        return num;
    }

}
54、函数传参
function argsAsArray(fn, arr) {
    return fn.apply(this,arr);
}
55、函数上线文
function speak(fn, obj) {
    return fn.bind(obj)()
}
56、返回函数
function functionFunction(str) {
    var f=function(x){
       return str+", "+x
    }
    return f
}
57、使用闭包
function makeClosures(arr, fn) {
    let newArr=[];
    for(var i =0;i<arr.length;i++){
          newArr[i] = fn.bind(null,arr[i]);
    }
    return newArr;
}
58、二次封装函数
function partial(fn, str1, str2) {
    var result=function(str3){
        return fn(str1,str2,str3)
    }
    return result
}
59、使用arguments
function useArguments() {
    var num = 0;
    for(var i=0;i<arguments.length;i++){
        num += arguments[i];
    }
    return num;
}
60、使用apply调用函数
function callIt(fn) {
     return fn.apply(this,[].slice.call(arguments,1));
}

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1bkp3dg8znauz

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值