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
}

原文地址:https://www.cnblogs.com/miaSlady/p/10931100.html