zoukankan      html  css  js  c++  java
  • 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
    }

  • 相关阅读:
    hdu 6702 ^&^ 位运算
    hdu 6709 Fishing Master 贪心
    hdu 6704 K-th occurrence 二分 ST表 后缀数组 主席树
    hdu 1423 Greatest Common Increasing Subsequence 最长公共上升子序列 LCIS
    hdu 5909 Tree Cutting FWT
    luogu P1588 丢失的牛 宽搜
    luogu P1003 铺地毯
    luogu P1104 生日
    luogu P1094 纪念品分组
    luogu P1093 奖学金
  • 原文地址:https://www.cnblogs.com/miaSlady/p/10931100.html
Copyright © 2011-2022 走看看