首页 > 代码库 > 编程题总结

编程题总结

/*编写一个方法,对传入的参数进行排序*/
//考察arguments对象,对象属性的遍历

function sortArguments(){
var arr=[];
for(var key in arguments){
arr.push(arguments[key]);
}
return arr.sort();
}

 

/** 
*@desc: fibonacci 
*@param: count {Number} 
*@return: result {Number} 第count个fibonacci值,计数从0开始  
fibonacci数列为:[1, 1, 2, 3, 5, 8, 13, 21, 34 …]  
则getNthFibonacci(0)返回值为1  
则getNthFibonacci(4)返回值为5 */
//规律:第三个数是前两个数之和

function getNthFibonacci(count) {
if (count<0) return 0;
if (count<=1) return 1;
var first=1,second=1,third;
for (var i = 2; i <=count; i++) {
third=first+second;
first=second;
second=third;
};
return third;
}

/*.有这样一个URL,http://mail.163.com/?a=1&b=2&c=3&d=xxx&e。
输出函数QuerySearch(),其有一个参数name,输出其对应的value。
*/

考察的是字符串操作

思路:str.split(‘?’)[1]返回的是问号后面的字符串

再使用一次split(‘&’)返回的是数组

通过遍历数组元素字符串,使用indexOf()判断输入的name+‘=‘是否为-1,如果是就表明不存在,遍历下一个,如果不为-1,表明存在,返回该数组元素中的=后面的值,使用slice(start),start是(name+‘=‘).length

function querySearch(url,name){
    var arr=url.split(‘?‘)[1].split(‘&‘);
    var msg=name+‘=‘;
    for (var i = 0; i < arr.length;) {
        var index=arr[i].indexOf(msg);
        if (index<0) {
            i++;
        }else{
            start=msg.length;
            return arr[i].slice(start)
        };
    };
    return "NOT FOUND";
}

/*编写一个方法,去掉一个数组的重复元素。*/

思路:把数组的值一次放入新的数组,放入之前判断已经放入的元素有没有一样的值

newarr.indexOf(arr[i])==-1表示没有

function removeDuplicate(arr) {
    var result=[];
    for (var i = 0; i < arr.length; i++) {
        if (result.indexOf(arr[i])==-1) {
            result.push(arr[i]);
        };
    };
    return result;
      
}

/*编写一个JavaScript函数,传入仅包含数字的多维数组,返回拍平后的结果。
(比如,传入[1,[2,3]],返回[1,2,3])*/

思路,arr的join()转化为字符串,再用str的split转化为数组,注意:这时候数组的值是字符串,应该用Number()转化类型,还用到了arr的map方法

function flatten(arr) {
    //return  flatted_arr;
    var newarr = arr.join().split(",");
    //字符串类型转化为数字类型
    return newarr.map(function(e) {
        return Number(e)
    })

}

/*请写一个 getParents 方法让它可以获取某一个 DOM 元素的所有父亲节点。*/

思路:通过id获取该元素,e.parentNode.parentNode....考虑用while语句,语句中先把获取到父元素的tagName存入数组,然后获取到该父元素的父元素,判断是否存在(parent.tagName)

function getParents(id) {
    var e = document.getElementById(id);
    var parent = e.parentNode;
    var arr = [];
    //while先判断再执行
    while (parent.tagName) {
        arr.push(parent.tagName);
        parent = parent.parentNode;
    }

    console.log(arr)
};

/*已知有字符foo="get-element-by-id",写一个function将其转换成驼峰表示法"getElementById" */

思路:arr的split分割成数组,循环遍历数组,使用charAt(0)获取第一个字符变成大写,再使用concat(1)连接剩下的数组,最后再用数组的Join(‘‘)连起来

tips:一定要用join(‘’),不然会用逗号连起来

function toUpperNote(str) {
    var result;
    var arr;
    arr = str.split(‘-‘);
    for (var i = 1; i < arr.length; i++) {
        arr[i] = arr[i].charAt(0).toUpperCase().concat(arr[i].slice(1))
    };
    return arr.join(‘‘);
}

/*对象的深度克隆*/

思路:首先判断对象的类型

function isClass(o) {
    if (o === null) return "Null";
    if (o === undefined) return "Undefined";
    return Object.prototype.toString.call(o).slice(8, -1);
}

function deepClone(obj) {
    var result, oClass = isClass(obj);
    //确定result的类型
    if (oClass === "Object") {
        result = {};
    } else if (oClass === "Array") {
        result = [];
    } else {
        return obj;
    }
    for (key in obj) {
        var copy = obj[key];
        if (isClass(copy) == "Object") {
            result[key] = arguments.callee(copy); //递归调用
        } else if (isClass(copy) == "Array") {
            result[key] = arguments.callee(copy);
        } else {
            result[key] = obj[key];
        }
    }
    return result;
}

 

编程题总结