• es6 一些面试题


    //题目1:js 统计一个字符串出现频率最高的字母/数字
    //法1:两次遍历
    var str = 'asdfghjklaqwertyuiopiaia';
    var mostOne=function (str){
    var obj={},max='',index=0,str=[...str];
    str.forEach(v => {
    obj[v]=obj[v] ? ++obj[v] : 1;
    });
    for(var i in obj){
    if(obj[i]>index){
    max=i;index=obj[i]
    }
    }
    return max
    }
    //法2:一次遍历
    var str = 'asdfghjklaqwertyuiopiaia';
    var mostOne=function (str){
    var obj={},max='',index=0,str=[...str];
    str.forEach(v => {
    obj[v] = obj[v] ? ++obj[v] : 1;
    if(obj[v]>index){
    max=v;index=obj[v]
    }
    });
    return max
    }


    //题目2:数组去重 Array.from(1.讲类数组转化为数组 2.浅拷贝)
    //法一:用Array.from 和 new Set()
    var arr = ['1', '2', '3', '1', 'a', 'b', 'b']
    var brr=Array.from(new Set(arr));

    //或

    brr=[...arr]; 

    //法二:数组遍历+indexOf(相当于两次遍历)
    var arr = ['1', '2', '3', '1', 'a', 'b', 'b']
    var brr = arr=>{
    let brr=[];
    arr.forEach((v)=>{
    if(brr.indexOf(v)==-1){
    brr.push(v);
    }
    });
    return brr;
    }
    //法三:只遍历一次数组,不区分number和string适用
    var arr = ['1', '2', '3', '1', 'a', 'b', 'b']
    var brr = arr=>{
    let obj={};
    arr.forEach(v=>{
    obj[v]=1
    })
    return Object.keys(obj)
    }
    //法三:arr.filter return 满足条件的
    var arr = ['1', '2', '3', '1', 'a', 'b', 'b']
    var brr = arr=>{
    return arr.filter((v,i)=>{
    return arr.indexOf(v) == i;
    })
    }


    //题目3:翻转字符串
    //法一:
    var str ="Hello Dog";
    var reverseStr = str=>{
    return str.split("").reverse().join("");
    }
    //法二:
    var str ="Hello Dog";
    var reverseStr = str=>{
    return [...str].reverse().join("");
    }


    //题目4:数组中最大差值
    //法一:
    var arr = [23, 4, 5, 2, 4, 5, 6, 6, 71, -3];
    var difference = arr=>{
    var max=0,min=arr[0];
    arr.forEach(v=>{
    max = v>max ? v : max;
    min = v<min ? v : min;
    })
    return max-min;
    }
    //法二:
    var arr = [23, 4, 5, 2, 4, 5, 6, 6, 71, -3];
    var difference = arr=>{
    var max=Math.max(...arr),min=Math.min(...arr);
    return max-min;
    }

    //题目5:不借助临时变量,进行两个整数的交换
    //法一:结构
    var a = 2,b = 3;
    [a,b]=[b,a];
    //法二:异或
    var a = 2,b = 3;
    (()=>{
    a^=b;
    b^=a;
    a^=b;
    })()

    //法三:+-得到

    function swap(a , b) {
    b = b - a;
    a = a + b;
    b = a - b;
    return [a,b];
    }



    //题目6:排序(从小到大)
    //法一:利用sort函数
    var arr = [43, 32, 1, 5, 9, 22];
    var sort = arr=>{
    return arr.sort((a,b)=>{
    return a-b;
    })
    }
    //法二:冒泡排序
    var arr = [43, 32, 1, 5, 9, 22];
    var sort = arr=>{
    arr.forEach((v,i)=>{
    for(j=i+1,len=arr.length;j<len;j++){
    if(arr[j]<arr[i]){
    [arr[i],arr[j]]=[arr[j],arr[i]]
    }
    }
    })
    return arr;
    }

     //题目7:数组求和

    let reduce=(arr)=>{ //第一种常规遍历。
            let num=0; 
            for(let [index,value] of arr.entries()){
                num+=value;
            }
            return num;
        }
        let reduce=(arr)=>eval(arr.join("+")); //第二种 
        //join() 方法把数组元素放入字符串 上面的栗子: arr.join("+")得到字符串:'3+4+8+0+9';
        // eval() 函数计算字符串 ,并执行其中的的 JavaScript 代码
        //经提醒:原来有一个reduce()数组求和的方法,把这个方法加上去
        let result=[3,4,8,0,9].reduce((total,value)=>{ //这两个参数是默认参数不用设置的
    return total+value
    });

      //题目8:

    //随机生成指定长度的字符串
    //比如给定 长度 8 输出 4ldkfg9j

    randomString=()=>{
    var str= 'abcdefghijklmnopqrstuvwxyz9876543210',myStr='',len=str.length;
    for(i=0;i<8;i++){
    myStr+=str[Math.floor(Math.random()*len)];
    //或 myStr+=str.charAt(Math.floor(Math.random()*len));
    }
    return myStr
    }

  • 相关阅读:
    sky A800s手机恢复出厂设置操作
    SlimDx绘制点图元的问题
    自定义Token的CAS登录
    未来谁才是移动互联网的入口?
    [Oracle]Sqlplus连接成功,但pl/sql连接不成功,提示“ora-12145:无法解析指定的连接标识符”
    memcached分布式内存系统
    Android下结束进程的方法
    博客搬家啦~
    NOIp2013火柴排队
    NOIp2014 T2联合权值
  • 原文地址:https://www.cnblogs.com/miaSlady/p/10931100.html
Copyright © 2020-2023  润新知