js刷题记录

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

优化:

1
2
3
4
5
function parSort(par) {
return par.sort(function(arr1, arr2) {
return arr1.age > arr2.age ? -1 : 1;
});
}

4、有字符串 var = ‘abc345efgabcab’,请写出 3 条 JS 语句分别实现如下 3 个功能:
1)去掉字符串中的a、b、c 字符,形成结果:’345efg’
2)将字符串中的数字用中括号括起来,形成结果:’abc3[5]efgabcab’
3)将字符串中的每个数字的值分别乘以 2,形成结果:’abc6810efgabcab’

我的:

var str= 'abc345efgabcab';
var arrStr=str.split('');
var result= arrStr.filter(function(s){
    return s=='a' || s=='b' || s=='c'?'':s
}).join('')

var result=[];
arrStr.forEach(function(s){
    var num=s;
    if(Number(s)==s){
        num='['+num+']'
    }
    result.push(num)
})
result.join('');

这个时候对正则表达式还不了解,看了别人的发现用正则表达式会非常简洁

优化:

// 1)
str.replace(/([a-c])/g, '');
// 2)
str.replace(/(\d)/g, '[$1]');
// 3)
str.replace(/(\d)/g, function(num) {return num*2;});

5、请写一段 JS 程序类,定义一个列表类List,该类包含两个成员:属性 length(表示列表中的元素个数)和方法 add (像列表中添加元素),其中要求构造函数和 add 方法的参数为动态参数。

我的:

function List() {
        this.data = [];
        for(var i in arguments){
            this.data.push(arguments[i])
        }
        this.length = this.data.length;
        this.add = function () {
            for(var i in arguments){
                this.data.push(arguments[i])
                this.length++;
            }
        }
    }
    var newlist = new List('a', 'b', 'c');
    //newlist.add('a', 'b')

arguments对象不是一个 Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性

6、请问这个 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";
}

7、请写出一下正则表达式:
1)匹配一个全部是数字的字符串
2)提取一个 url 所使用的协议类型如 http、ftp 和 host 名称

我的:

var patt1= /^\d+$/
var patt2 = /^(\w+):\/\/w*\.?(\w+)\.\w+\/.*\.(\w+)/;

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

我的:

function creatSumFun(){
        var s=0;
        return function(){
            return ++s;
        }
    }
    var sumFun=creatSumFun();
    sumFun();

9、请写出下面 JS 程序中几个 document.write 的结果:

function Parent() {
    this.a = 1;
    this.b = [1, 2, this.a];
    this.c = {demo: 5};
    this.show = function() {
        document.write(this.a + ' ' + this.c.demo + ':' + this.b + '<br/>')
    }
}
function Child() {
    this.a = 2;
    this.change = function() {
        this.b.push(this.a);
        this.a = this.b.length;
        this.c.demo = this.a++;
    }
}
Child.prototype = new Parent();
var parent = new Parent();
var child1 = new Child();
var child2 = new Child();
child1.a = 11;
child2.a = 12;
parent.show();
child1.show();
child2.show();
child1.change();
child2.change();
parent.show();
child1.show();
child2.show();

我的:无

真的是基础不行,看了好久发现是js的继承,继续努力!
11、请用 js 程序实现二分算法。

function midSearch(arr , target){
    var low=0;
    var heigh=arr.length-1;
    while (low<=heigh) {
        var mid=parseInt(low+(heigh-low)/2);
        if(target>arr[mid]){ low=mid+1 }
        if(target<arr[mid]){ heigh=mid-1 }
        if(target==arr[mid]){ return mid}
    }
    return low
}

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

function getQueJson(url) {
    var url=url.split('?');
    var part = /\w+(=)?(\w+)*/g;
    var str = url.match(part);
    var json = {};
    for (var i = 0; i < str.length; i++) {
        var s = str[i].split('=');
    json[s[0]] = s[1]==''?undefined:s[1];
    } 
    return json 
}