JS面试手写代码题

本文介绍了JavaScript实现的去重函数union,用于合并两个数组去重;同时概述了getType函数,用于检测输入参数类型;并展示了如何使用querySearch解析URL参数。这些实用技巧适用于前端开发和数据操作场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值