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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值