编程题总结(二)

1、一个数组 par 中存放有多个人员的信息,每个人员的信息由年龄 age 和姓名 name 组成,如{age: 2, name: 'xx'}。请写一段 JS 程序,对这个数组按年龄从小到大进行排序。

function sortAge(arr){
     return arr.sort(function(arr1,arr2){
         return arr1.age-arr2.age;
     })

}

return a-b:倒序

return b-a:升序

2、有字符串 var = 'abc345efgabcab',请写出 3 条 JS 语句分别实现如下 3 个功能:

1)去掉字符串中的a、b、c 字符,形成结果:'345efg'    str.replace(/[abc]/g,'')
2)将字符串中的数字用中括号括起来,形成结果:'abc3[5]efgabcab'  str.replace(/(\d)+/g, '[$1]');
3)将字符串中的每个数字的值分别乘以 2,形成结果:'abc6810efgabcab' str.replace(/(\d)/g, function(num) {return num*2;});

3、请写出下面 JS 程序中几个 alert 的结果:

var a = 100;
function fn() {
    alert(a);
    var a = 200;
    alert(a);
}
fn(); undefined 200
alert(a);100
var a;
alert(a);100
var a = 300;
alert(a);300

4、请问以前 JS 程序有什么问题?应该如何优化?

function setStyle(element) {
    element.style.fontWeight = "bold";
    element.style.textDecoration = "none";
    element.style.color = "#000000";
}

优化后:

function setStyle(element) {
    if (!element.style) {
        return;
    }
    var eleStyle = element.style;
    eleStyle.fontWeight = "bold";
    eleStyle.textDecoration = "none";
    eleStyle.color = "#000000";
}

5、请写出一下正则表达式:

1)匹配一个全部是数字的字符串 

var pat=/^\d+$/;
//开头到结尾都是数字的字符
var str='2345';
str.match(pat)
//["2345"]

2)提取一个 url 所使用的协议类型如 http、ftp 和 host 名称

var str = 'http://yangbai.me';
var pat=/(\w+):\/\/([\w.]+)/;
var result=str.match(pat);
//["http://yangbai.me", "http", "yangbai.me"]
var http=result[1];
var host=result[2];

6、请使用闭包的方式,写一段 JS 程序实现如下功能:函数每调用一次则该函数的返回值加 1。

function fn(){
    var n=0;
    function fn1(){
        n++;
        console.log(n);
    }
    return fn1;
}

var foo=fn();
foo();  //1
foo();  //2
foo();  //3

7、有这样一个 URL:http://vip.qq.com/a.php?a=1&b=2&c=&d=xxx&e,请写一段 JS 程序提取 URL 中的各个参数(参数名和参数个数不确定),将其按 key-value 形式返回到一个 json 结构中,如{a:'1',b:'2',c:'',d:'xxx',e:undefined}。

function UrltoJson(url){
    var arr=url.split('?')[1].split('&');
    var result={};
    arr.forEach(function(e){
        var aEle=e.split('=');
        result[aEle[0]]= aEle[1]? aEle[1]:undefined;
//判断是否存在
    })
    return result;
}

 8、编写一个方法 求一个字符串的字节长度 

function getBytes(str){
    var len=str.length;
    var bytes=len;
    for (var i = 0; i < len; i++) {
        if (str.charCodeAt(i)>255) {bytes++};
//Unicode大于255的字符占两个字节,其他占一个字节
    };
    return bytes;
}

 9、判断一个字符串中出现次数最多的字符,统计这个次数

把字母依次放在对象里,每次放之前判断已经存在这个属性,存在value+1;否则value=1;最后遍历这个对象,比较对象的max值,把最大的value和key打印出来

function maxTime(str){
    var len=str.length;
    var obj={};
    //将结果放在一个对象里,统计出现的次数
    for (var i = 0; i < len; i++) {
        var key=str.charAt(i);
        if (!obj[key]) {
            obj[key]=1;
        }else{
            obj[key]++;
        };
    };

    var max=-1;
    var max_key="";
    for (var key in obj){
        if (obj[key]>max) {
            max=obj[key];
            max_key=key;
        };
    }
    return "出现次数最多的字母是:"+max_key+"出现次数为:"+max;
    
}

10、什么是闭包?下面这个ul,如何点击每一列的时候alert其index?

<ul id="myul">
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
(function() {
       var ali = document.getElementsByTagName("li");
       
        var len = ali.length;
         for (var i = 0; i < len; i++) {
            ali[i].onclick = (function(i) {
                return function() {
                    alert(i + 1);
                }
            })(i);
        };
    })();

///*应该使用闭包的方式:使用立即执行函数 (function(i){})(i),将i作为参数传递进去,内部返回了一个函数,返回的函数会引用该参数;

11.实现缺少的解析函数

 

function tmpl(str,obj){
    var name=obj.name;
    var job=obj.job;
    return str.replace(/{name}/g,name).replace(/{job}/g,job);

}

 12.说出以下代码的原型链

 

转载于:https://www.cnblogs.com/t1amo/p/6594230.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值