天天看點

JavaScript常見算法面試題

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 = [,,,,,,,,,,,,,,];
        function deleteRepetition (arr) {
            var tmp = {};
            var newArr = [];
            for(var i =; 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 =; i < arr.length-; i++){
                for(var j = ; j < arr.length--i; j++){
                    if (arr[j]>arr[j+]) {
                        var count = arr[j];
                        arr[j] = arr[j+];
                        arr[j+] = 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 = ;
            for(var i = , 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 = ; i<url.length; i++) {
                if (url[i] === '?') {
                    // console.log(i);
                    var tmp = url.slice(i+);
                    // console.log(tmp);
                }
            }
            var newTmp = tmp.split('&');
            // var newArr = newTmp.split('=');
            for(let n in newTmp) {
                let arr = newTmp[n].split("=");
                resulet[arr[]] = arr[]; 
            }
            console.log(resulet);
        }
        toObj();

        //兩個數組一一配對成為對象的屬性和值
        var arr1 = ['wang', 'zhang', 'li'];
        var arr2 = ['11', '12', '13'];

        //第一種複雜解法
        var result = {};
        var arr = [];
        function toObject() {
            //第一步 先根據數組的索引值,配對成對象的類型
            for(var i = ; 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[]] = tmp[];
            }
        }
        toObject();
        console.log(result);
        //第二種 簡單版
        var o = {};
        for(let i = ; i< arr1.length; i++) {
            o[arr1[i]] = arr2[i];
        }
        console.log(o);
           
// 找出數組的中重複最多的值, 重複了多少次 
        var arr = [, , , , , , , , , , , null, 'a', 'a', 'b','a'];
        function moreRepetition(arr) {
            var newArr = [];
             for(var i=;i<arr.length;i++){
               var temp=arr[i];
               var count=;
               for(var j=;j<arr.length;j++){
                 if(arr[j]==temp){
                   count++;
                   arr[j]=-;
                 }
               }
               if(temp != -){
                 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('?')[];
            // console.log(arr);
            //通過"&",組成新的數組
            var newArr = arr.split('&');
            for(var i = ; i < newArr.length; i++) {
                var tmp = newArr[i].split('=');
                theRequest[tmp[]] = tmp[];
            }
            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&rq;
        GetRequest(url);
           

繼續閱讀