js小练习(六):最近刷到的一些js笔试题

最近在各大网站刷到的一些js的笔试题,都是自己已经调试测试过可行的代码。

整理非原创,只有核心注释是我自己写的,代码不是,仅作为笔记记录下来。阅读代码能力一般,如果出错的话请谅解,也欢迎指正。

(一)输入字符串,复制num次输出:

 function times(str,num) {
        return str.repeat(num);
    }
    console.log( times("ab",3));

测试数据ab,控制台输出ababab。

(二)原生js处理jsonp:

 function myCallback(data) {

        return console.log(data);
    }

    function jsonp(url, data, callback) {

        if (typeof data == "string") {
            callback = data;
            data = {};
        }
        url += url.indexOf("?") != -1 ? "&" : "?";//若url中存在?则url =url+“&”,若不存在,url = url+“?”;
        url += "callback=" + callback;
        var parms = "";
        for (var i in data) {
            parms += "&" + i + "=" + data[i];//主要考察for in,此处的data是指  { id:88 },i指向id,data[i]为id的value,即88
        }
        url += parms;
        var script = document.createElement("script");
        script.setAttribute("src", url);
        script.setAttribute("type","text/javascript");
        document.querySelector("head").appendChild(script);
    }
    jsonp(
        "http://www.baidu.com",
        { id:88},
        "myCallback")

最终结果是http://baidu.com?callback=myCallback&id=34。

调试的时候控制台会报错Uncaught SyntaxError: Unexpected token <,点开错误会显示是百度的网页代码,然后开头<!doctype html>出现红色波浪线,这里不是代码有误,是服务器的原因。

(三)编写parse函数:

var object = { 
        b:{c:4},
        d:[{e:5},{e:6}]
    };
    console.log(parse(object,"b.c") == 4);//true
    console.log(parse(object,'d[0].e') == 5);//true
    console.log(parse(object,"d.0.e") == 5);//true
    console.log(parse(object,"d[1].e") == 6);//true
    console.log(parse(object,"d.1.e") == 6);//true
    console.log(parse(object,"f") == "undefined");//true     
    请编写相应的parse()函数。

然后比起动不动就很长的代码,我很偶然的看见了一段很惊艳的答案:

function parse(obj,str){
    str.replace("[",".").replace("]",".").split(".").map((ele) => obj=obj[ele.trim()]);
    return obj || "undefined";}
}

没错,出去开头和结尾,核心代码只有两行。

我看了一下,感觉思路是用“.”替代json数组中的两个中括号,在用split分割开。最后是一个箭头函数,使用map()将分割开的两部分装入新的数组,以角标为依据取值。

但是测试出来还是有瑕疵的,比如说:

console.log(parse(object,'d[0].e') == 5);
console.log(parse(object,"d[1].e") == 6);

这两句在Chrome里面运行出来,控制器报错会显示e未定义,但是d.0.e和d.1.e的那两句是不会报错,这里我不太明白是题目的问题还是答案的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值