JavaScript常见算法面试题

来源:互联网 发布:淘宝童装店铺名 编辑:程序博客网 时间:2024/05/16 02:02
function Fn(){            getFn = function(){                console.log('1');            }            return this;        }        Fn.getFn = function(){            console.log('2');        }        Fn.prototype.getFn = function(){            console.log('3');        }        var getFn = function(){            console.log('4');        }        function getFn(){            console.log('5');        }        //  调用函数的方法        Fn.getFn(); //b  2        // 函数预解析, var getFn 和 function getFn(){}  整个被提升了 只留下 getFn=function(){}        getFn(); //d 4        // 首先调用了Fn()被执行,执行之后创建了getFn = funciton(){}刷新了55和58行的getFn函数执行内容        Fn().getFn(); //a 1        //因为之前Fn()已经被执行了 getFn已经发生变化了        getFn(); //a  1        // Fn.getFn()是一个整体,  new 开头执行整个函数        new Fn.getFn(); //b  2        //同一个()运算符 优先级相同, 从左往右执行        // 首先执行Fn(),得到Foo构造函数的实例对象getFn,由52的prototype.getFn得到结果        new Fn().getFn(); //c  3         // 首先执行new Fn() 得到了 new xxx.getFn() ,接着同上        new new Fn().getFn(); //c  3

//数组去重        var arr = [1,2,3,5,6,9,8,9,5,3,2,10,1,7,4];        function deleteRepetition (arr) {            var tmp = {};            var newArr = [];            for(var i =0; i < arr.length; i++){                if (!tmp[arr[i]]) {                    tmp[arr[i]] = true;                    newArr.push(arr[i]);                }            }            sortArr(newArr);            console.log(newArr);        }        //冒泡排序        function sortArr(arr){            for (var i =0; i < arr.length-1; i++){                for(var j = 0; j < arr.length-1-i; j++){                    if (arr[j]>arr[j+1]) {                        var count = arr[j];                        arr[j] = arr[j+1];                        arr[j+1] = count;                    }                }            }        }        deleteRepetition(arr);

var cache = new Object();        var mult = function () {            // 调用Array内置方法,把传入的参数转化为类数组            var args = Array.prototype.join.call(arguments,',');            // console.log(typeof args); //string            // 判断cache对象是否有该属性            if (cache[args]) {                return cache[args];            }            var a = 1;            for(var i = 0, l = arguments.length; i < l; i++) {                a = a * arguments[i];            }            // console.log(typeof cache);            return cache[args] = a;        }        // console.log(mult(1,2,3)); //6        // console.log(mult(4,5,6)); //120        console.log(cache);        var url = 'http://www.baidu.com?a=b&c=d&e=123456';        var resulet = new Object();        function toObj() {            // var tmp = [];            for(let i = 0; i<url.length; i++) {                if (url[i] === '?') {                    // console.log(i);                    var tmp = url.slice(i+1);                    // console.log(tmp);                }            }            var newTmp = tmp.split('&');            // var newArr = newTmp.split('=');            for(let n in newTmp) {                let arr = newTmp[n].split("=");                resulet[arr[0]] = arr[1];             }            console.log(resulet);        }        toObj();        //两个数组一一配对成为对象的属性和值        var arr1 = ['wang', 'zhang', 'li'];        var arr2 = ['11', '12', '13'];        //第一种复杂解法        var result = {};        var arr = [];        function toObject() {            //第一步 先根据数组的索引值,配对成对象的类型            for(var i = 0; i < arr1.length; i++) {                let tmp = arr1[i] + ':' + arr2[i];                arr.push(tmp)            }            console.log(arr);            //第二步 通过split分割字符串组成新的数组            for(let i in arr) {                let tmp = arr[i].split(':');                //object["key"] = value 语法                result[tmp[0]] = tmp[1];            }        }        toObject();        console.log(result);        //第二种 简单版        var o = {};        for(let i = 0; i< arr1.length; i++) {            o[arr1[i]] = arr2[i];        }        console.log(o);

// 找出数组的中重复最多的值, 重复了多少次         var arr = [110, 1, 2, 3, 1, 2, 4, 1, 2, 3, 1, null, 'a', 'a', 'b','a'];        function moreRepetition(arr) {            var newArr = [];             for(var i=0;i<arr.length;i++){               var temp=arr[i];               var count=0;               for(var j=0;j<arr.length;j++){                 if(arr[j]==temp){                   count++;                   arr[j]=-1;                 }               }               if(temp != -1){                 newArr.push(temp+":"+count)               }             }             console.log(newArr);             return newArr;        }        moreRepetition(arr);        //获取url中 request中的params        function GetRequest(url) {            var url = url;             var theRequest = {};            //获取url中"?"符后的字串            var arr = url.split('?')[1];            // console.log(arr);            //通过"&",组成新的数组            var newArr = arr.split('&');            for(var i = 0; i < newArr.length; i++) {                var tmp = newArr[i].split('=');                theRequest[tmp[0]] = tmp[1];            }            console.log(theRequest);            return theRequest;        }        var url = 'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=93380420_hao_pg&wd=js%E4%BB%8Eurl%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%8F%82%E6%95%B0&oq=amd%2520cmd%2520%25E5%258C%25BA%25E5%2588%25AB&rsv_pq=eb0fff93000563c9&rsv_t=f6444Mx%2FIx%2BNj1MwceBPJuBtcEd1%2FTPHXwOTKu7WjphBcY1PKBNCmAqzRmCl53Ko369jfgak&rqlang=cn&rsv_enter=1&inputT=6228&rsv_sug3=16&rsv_sug1=13&rsv_sug7=100&rsv_sug2=1&prefixsug=js%25E4%25BB%258E&rsp=1&rsv_sug4=6228';        GetRequest(url);