0
点赞
收藏
分享

微信扫一扫

JS面试手写代码题

IT程序员 2022-03-15 阅读 56
1.//实现一个去重函数
function union(a, b){
 return [...new Set([...a,...b])]
}
union([1,2,3],[4,3,2,4]);//[1,2,3,4]
2./**获取入参的类型
*例如:
* getTYpe(1) => Number
* getTYpe(true) => Boolean
* getTYpe([1,2,3]) => Array
* getType({a:1}) => Object
*/
function getType(param){
   const str = Object.prototype.toString.call(param);
   const  type = str.replace('object','')
  return type.replace(/\[|]/g,'').trim()
}
3.//实现一个方法,拆解URL参数中queryString
//入参
//const url = 'http://sample.com/?a=1&b=2&c=xx&d#hash';
//出参
//const result = {a:'1',b:'2',c:'xx',d:''};
function querySearch(url){
 const paramsStr = /.+\?(.+)$/.exec(url)[1]; // 将 ? 后面的字符串取出来
    const paramsArr = paramsStr.split('&'); // 将字符串以 & 分割后存到数组中
    let paramsObj = {};
    // 将 params 存到对象中
    paramsArr.forEach(param => {
        if (/=/.test(param)) { // 处理有 value 的参数
            let [key, val] = param.split('='); // 分割 key 和 value
            val = decodeURIComponent(val); // 解码
            val = /^\d+$/.test(val) ? parseFloat(val) : val; // 判断是否转为数字
    
            if (paramsObj.hasOwnProperty(key)) { // 如果对象有 key,则添加一个值
                paramsObj[key] = [].concat(paramsObj[key], val);
            } else { // 如果对象没有这个 key,创建 key 并设置值
                paramsObj[key] = val;
            }
        } else { // 处理没有 value 的参数
            paramsObj[param] = '';
        }
    })
    
    return paramsObj;
}
4.//实现一个debounce函数
let debounce = (func, wait,immediate) => {
ar timeout, result;
    
    var debounced = function () {
        var context = this;
        var args = arguments;
        
        if (timeout) clearTimeout(timeout);
        if (immediate) {
            // 如果已经执行过,不再执行
            var callNow = !timeout;
            timeout = setTimeout(function(){
                timeout = null;
            }, wait)
            if (callNow) result = func.apply(context, args)
        } else {
            timeout = setTimeout(function(){
                func.apply(context, args)
            }, wait);
        }
        return result;
    };

    debounced.cancel = function() {
        clearTimeout(timeout);
        timeout = null;
    };

    return debounced;
}
举报

相关推荐

0 条评论