编程题总结

/*编写一个方法,对传入的参数进行排序*/
//考察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 fibonacci(n){
     var arr=[1,1];
     if (n==1) return arr[0];
     if (n==2) return arr;

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

/*.有这样一个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('');
}

 

 // 截取location.search,转换为一个对象:

function searchToObject(str) {
    str = str.slice(1);
    var arr = str.split("&");
    var obj={},
        newarr;
    arr.forEach(function(e) {

        newarr = e.split("=");
        if (newarr[0] && newarr[1]) { obj[newarr[0]] = newarr[1] }

    });
    return obj;

}

 cookie的设置,删除,获取

function setCookie(name,value,path,domain,expires,secure){
    var cookie=name+"="+encodeURIComponent(value);
    if (expires instanceof Date) cookie+="; expires="+expires.toGMTString();
    if (path) cookie+="; ="+path;
    if (domain) cookie+="; domain="+domain;
    document.cookie=cookie;

}

function getCookie(){
    var cookie={};

    var all=document.cookie;
    if (all===null) return cookie;
    var list=all.split("; ");

    for (var i = 0; i < list.length; i++) {
         
        var p=list[i].indexOf("=");

        var name=list[i].substring(0,p);
        var value=list[i].substring(p+1);
        value=decodeURIComponent(value);
        cookie[name]=value;
    }
    return cookie;
}

function delCookie(name,path,domain,secure){
    //必须要设置成相同的域和路径才可以
    var cval=getCookie().name;
    if (cval!=null) {
        document.cookie=name+"="+cval+ "; max-age=0";
    };
}

 实现深度克隆

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;
}
//返回传递给他的任意对象的类
function isClass(o){
    if(o===null) return "Null";
    if(o===undefined) return "Undefined";
    return Object.prototype.toString.call(o).slice(8,-1);
}

页面所有的checkbox

(function getCheckbox() {
        var oInput = document.getElementsByTagName("input");
        var len = oInput.length;
        var aList = [];
        while (len--) {        //while的效率比较高
            if (oInput[len].type == "checkbox") {
                aList.push(oInput[len]);
            };
        }
        console.log(aList) ;
    })();

 .输出今天的日期,以YYYY-MM-DD的方式,比如今天是2014年9月26日,则输出2014-09-26

function getMydate(){
    var date=new Date;
    var year=date.getFullYear();
    var month=date.getMonth()+1;
    var day=date.getDate();
    day = day < 10 ? '0' + day : day;//如果小于10加上0
    return year+"-"+month+"-"+day;
}

 

posted @ 2017-03-14 17:33  T1amo  阅读(168)  评论(0编辑  收藏  举报