//题目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
}