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 = [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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值