zoukankan      html  css  js  c++  java
  • 前端笔试题(一)

    题目描述 一:

    获取 url 中的参数
    1. 指定参数名称,返回该参数的值 或者 空字符串
    2. 不指定参数名称,返回全部的参数对象 或者 {}
    3. 如果存在多个同名参数,则返回数组
     
    示例1

    输入

    http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe

    输出

    [1, 2, 3]

    代码:

    function getUrlParam(sUrl, sKey) {
        var obj = {};
        var index = sUrl.indexOf('?');
        //url没有带参数
        if(index==-1) {
            if(sKey==undefined){
                return obj;
            }else{
                return "";
            }
        }
         
        var queryString = (sUrl.split("?")[1]).split("#")[0];
        var query = queryString.split('&');//分离出了所有参数
         
        for(var i=0;i<query.length;i++){
            var keyValue = query[i].split("=");
            var key = keyValue[0];
            var value = keyValue[1];
            //console.log('key: '+key+" value: "+value);
            if(value ==""){
                continue;//value值为空,进行下一次循环?为空就不进行统计了?
            }
            if(obj.hasOwnProperty(key)){//hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的属性。如果有,返回true,否则返回false。
                if(Array.isArray(obj[key])){//判断是不是数组
                    obj[key].push(value);
                }else{//不是数组
                    var val = obj[key];
                    obj[key] = [];
                    obj[key].push(val);//?????有点蒙,这是为什么呀
                    obj[key].push(value);//这一段else里面的是真的不懂
                }
      
            }else{//有新参数,直接添加
                obj[key]=value;
            }
      
        }
        //console.log(obj)
        //1.指定参数名的,返回该参数的值或空
        if(sKey){
            return obj[sKey]?obj[sKey]:"";
        }else{
            return obj;
      
        }
      
    }
    

      

    
    

    题目描述二:

    查找两个节点的最近的一个共同父节点,可以包括节点自身

    输入描述:

    oNode1 和 oNode2 在同一文档中,且不会为相同的节点

    代码:

    function commonParentNode(oNode1, oNode2) {
        if(isChildNode(oNode1,oNode2)){
            return oNode2;
        }
        if(isChildNode(oNode2,oNode1)){
            return oNode1;
        }
        var sameParentNode = oNode1.parentNode;
        while(sameParentNode!=document){
            if(isChildNode(oNode2,sameParentNode)){
                return sameParentNode;
            }
            sameParentNode = sameParentNode.parentNode;
        }
        return document;
         
    }
    function isChildNode(cNode,pNode){
        var children = pNode.childNodes;
        for(var i=0;i<children.length;i++){
            if(children[i].childNodes.length>0){
                return isChildNode(cNode,children[i]);
            }
            if(cNode==children[i]){
                return true;
            }
        }
        return false;
    }
    

      

    题目描述三

    根据包名,在指定空间中创建对象

    输入描述:

    namespace({a: {test: 1, b: 2}}, 'a.b.c.d')

    输出描述:

    {a: {test: 1, b: {c: {d: {}}}}}

    代码:

    function namespace(oNamespace, sPackage) {
        var arr = sPackage.split('.');
        var res = oNamespace;   // 保留对原始对象的引用
     
        for(var i = 0, len = arr.length; i < len; i++) {
            if(arr[i] in oNamespace) {  // 空间名在对象中
                if(typeof oNamespace[arr[i]] !== "object") {    // 为原始值
                    oNamespace[arr[i]] = {};    // 将此属性设为空对象           
                }  
            } else {    // 空间名不在对象中,建立此空间名属性,赋值为空
                oNamespace[arr[i]] = {};
            }
             
            oNamespace = oNamespace[arr[i]];    // 将指针指向下一个空间名属性。
        }
     
        return res;
     
    }
    

      

    题目描述四:

    为 Array 对象添加一个去除重复项的方法
    示例1

    输入

    [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]

    输出

    [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']
    Array.prototype.uniq = function () {
        var result = [];
        var flag = true;
        for(var i =0;i<this.length;i++)
            {
                if(result.indexOf(this[i])==-1)
                    {
                        if(this[i]!=this[i])
                            {
                                if(flag)
                                    {
                                        result.push(this[i]);
                                        flag = false;
                                    }
                            }
                        else
                            {
                                result.push(this[i]);
                            }
                    }
            }
        return result;
    }

    题目描述五:

    用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等

    代码:

    function fibonacci(n) {
        var arr = [];
        arr[0] = 1;
        arr[1] = 1;
        for(var i = 2; i <= n ; i++) {
            arr[i] = arr[i - 1] + arr[i - 2];
        }
        return arr[n - 1];
    }
    

      

    题目描述六

    如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1
    否则如果字符 Unicode 编码 > 255 则长度为 2
    示例1

    输入

    'hello world, 牛客', false

    输出

    17

    代码:

    function strLength(s, bUnicode255For1) {
        if(bUnicode255For1){
            return s.length;
        }else{
            var len=s.length;
            for(var i=0;i<s.length;i++){
                if(s.charCodeAt(i)>255){
                    len++;
                }
            }
            return len;
        }
    }

    题目描述七:

    判断输入是否是正确的邮箱格式

    输入描述:

    邮箱字符串

    输出描述:

    true表示格式正确
    function isAvailableEmail(sEmail) {
       return /^(w+)(.w+)*@(w+)(.w+)*.(w+)$/i.test(sEmail);
    }

    题目描述八:

    将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff
    1. rgb 中每个 , 后面的空格数量不固定
    2. 十六进制表达式使用六位小写字母
    3. 如果输入不符合 rgb 格式,返回原始输入
    示例1

    输入

    'rgb(255, 255, 255)'

    输出

    #ffffff
    function rgb2hex(sRGB) {
        return sRGB.replace(/^rgb((d+)s*,s*(d+)s*,s*(d+))$/,function($0,$1,$2,$3){
             return '#'+toHex($1)+toHex($2)+toHex($3);
        });
        function toHex(str){
        return ('0'+(+str).toString(16)).slice(-2);
    }
    }
    

     

    题目描述九:

    css 中经常有类似 background-image 这种通过 - 连接的字符,通过 javascript 设置样式的时候需要将这种样式转换成 backgroundImage 驼峰格式,请完成此转换功能
    1. 以 - 为分隔符,将第二个起的非空单词首字母转为大写
    2. -webkit-border-image 转换后的结果为 webkitBorderImage
    示例1

    输入

    'font-size'

    输出

    fontSize

    代码:

    function cssStyle2DomStyle(sName) {
        var result=sName.replace(/^-/,'').split('-');
        for(var i=1;i<result.length;i++){
           result[i]= result[i].replace(/^w/,function(e){
                return e.toUpperCase();
            })
        }
        return result.join('');
    }

    题目描述十:

    统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率
    1. 不限制 key 的顺序
    2. 输入的字符串参数不会为空
    3. 忽略空白字符
    示例1

    输入

    'hello world'

    输出

    {h: 1, e: 1, l: 3, o: 2, w: 1, r: 1, d: 1}

    代码:

    function count(str) {
        var count = {};
        var str1 = str.match(/S/g)
        for(var i in str1) {
            if(count[str1[i]]){
                count[str1[i]]++;
            }
            else{
                count[str1[i]] = 1;
            }
        }
        return count;
    }

    题目描述十一:

    按所给的时间格式输出指定的时间
    格式说明
    对于 2014.09.05 13:14:20
    yyyy: 年份,2014
    yy: 年份,14
    MM: 月份,补满两位,09
    M: 月份, 9
    dd: 日期,补满两位,05
    d: 日期, 5
    HH: 24制小时,补满两位,13
    H: 24制小时,13
    hh: 12制小时,补满两位,01
    h: 12制小时,1
    mm: 分钟,补满两位,14
    m: 分钟,14
    ss: 秒,补满两位,20
    s: 秒,20
    w: 星期,为 ['日', '一', '二', '三', '四', '五', '六'] 中的某一个,本 demo 结果为 五
    示例1

    代码:

    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]});
    }
    
    formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss 星期w')
    "2017-09-18 12:38:26 星期一"












  • 相关阅读:
    【jQuery】添加删除记录练习
    git
    常用正则表达式
    【资源】前端插件
    menu 菜单显示隐藏-jquery实现
    java作业——Day006
    java作业——Day005
    java作业——Day004
    java作业——Day003
    java作业——Day001
  • 原文地址:https://www.cnblogs.com/thaiwx/p/7542497.html
Copyright © 2011-2022 走看看