美文网首页
前端常见面试题(一)

前端常见面试题(一)

作者: 铜牛彦祖 | 来源:发表于2018-07-02 18:31 被阅读0次

    1.实现一个函数 clone(),可以对 JavaScript 中的5种主要的数据类型(包括 Number、String、Object、Array、Boolean)进行值复制。

    function clone(obj) {
        if(typeof obj === 'object' && typeof obj !== 'null') {
            var o = Object.prototype.toString.call(obj).slice(8,-1) === 'Array'?[]:{}
            for (var k in obj){
                if(typeof obj[k] === 'object' && typeof obj[k] !== 'null'){
                    o[k] = clone(obj[k])
                } else {
                    o[k] = obj[k];
                } 
            }
        } else {
            return obj;
        }
        return o;
    }
    

    2.把烤串传化为驼峰的形式

    function test(str) {
        var re = /-(\w)/g;
        return str.replace(re,function($0,$1){
            return $1.toUpperCase();
        })
    }
    alert(test(str))
    

    3.查找字符串出现最多的字符和个数

    function test(str) {
        //分割排序,把相同的字符连在一起
        var arr = str.split("");
        arr.sort();
        str = arr.join("");
    
        var re = /(\w)\1+/g;  //\1和第一个子项是相同的
        
        var num = 0;
        var value = 0;
    
        str.replace(re,function($0,$1){
            if(num < $0.length) {
                num = $0.length;
                value = $1;
            }
            
        });
        return '最多的字符是:'+value+',出现了:'+num + '次';
    }
    
    

    4. 如何给字符串加千分符

    function test(str) {
        //var re = /(?=(\d{3})+$)/g; //如果字符串位数是3的倍数,那最前面还是会有一个,号
        var re = /(?=(?!\b)(\d{3})+$)/g; //再加一个反前项声明可以解决这个问题
        return str.replace(re,",");
    }
    console.log(test(str))
    

    5.返回一个只包含数字类型的一个数组

    var str = "js123fsafaf78fdasf653cg";
    var re = /\d+/g;
    str = str.match(re)
    console.log(str)
    

    6.ab两个变量 不用第三个变量来切换两个变量值

    var a = 'hello';
    var b = 'hi';
    a = [a,b];
    b = a[0];
    a = a[1];
    alert(a); //hi
    alert(b); //hello
    

    7.有一个数n=5,不用for循环,怎么返回[1,2,3,4,5]这样一个数组

    switch(n<100){
        case true:
            return n;
        break;
        case false:
            return 100;
        break
    }
    

    8 斐波那契数列 1、1、2、3、5、8、13、21。 斐波那切数列的意思:第一个数和第二个数相加等于第三个数,第二个数和第三个数相加等于第四个数。输入一个位置求出对应位置的数字。

    //第一种
    function aaa(n) {
            if (n <= 2) {
                return 1;
            }
            return aaa(n - 1) + aaa(n - 2)
    
        }
    
        //  alert(aaa(5))
    
    
        //第二种 通过迭代的方式
        function aaa(n) {
            var num1 = 1;
            var num2 = 2;
            var num3 = 0;
            for (var i = 0; i < n - 2; i++) {
                num3 = num1 + num2;
                num1 = num2
                num2 = num3
            }
            return num3;
        }
        //alert(aaa(8))
    

    9.数据排序 冒泡排序和选择排序

    //冒泡排序
    function aaa(arr) {
        for (var i = 0; i < arr.length; i++) {
            for (var j = 0; j < arr.length - i; j++) {
                toCon(j, j + 1);
            }
        }
    
        function toCon(prev, next) {
            var tmp = '';
            if (arr[prev] > arr[next]) {
                tmp = arr[prev];
                arr[prev] = arr[next]
                arr[next] = tmp;
            }
        }
    
        return arr;
    }
    
    
    //选择排序
    function aaa(arr) {
        if (arr.length == 1) {
            return;
    
        }
    
        var iMin = arr[0];
        var iIndex = 0;
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] < iMin) {
                iMin = arr[i] //找到最小值
                iIndex = i;
            }
        }
        var prev = arr.splice(iIndex, 1); //[1]
    
        return prev.concat(aaa(arr))
    }
    

    10.数组去重 利用json keys的唯一性实现数组去重

    function quchong(){
    var result = []
    var obj = {
        // 5:1,
        // 2:1,
        // 7:1
    }
    for(var i=0;i<arr.length;i++){
        if(!obj[arr[i]]){
            result.push( arr[i] )
            obj[arr[i]] = 1
        }
    }
    return result;
    }
    

    相关文章

      网友评论

          本文标题:前端常见面试题(一)

          本文链接:https://www.haomeiwen.com/subject/ptnluftx.html