1. 统计一个字符串中某个字符出现的次数?
1.1直接迭代
var str = "asdfadeaeraerta"
var sub="a" //a字符出现了多少次
//先将str字符串转数组
var arr=str.split('')
console.log(arr);//["a", "s", "d", "f", "a", "d", "e", "a", "e", "r", "a", "e", "r", "t", "a"]
var num=0; //设置初始值为0
for(var i=0;i<arr.length;i++){
if(arr[i]==sub){
num++
}
}
console.log(num);
1.2封装方法 indexOf判断 这种方法比上面的方法性能更高
var str = "asdfadeaeraerta"
var sub="a"
function Finda(str,a){
let n=0; //初始值为0
let index=str.indexOf(a) //index为下标 在str中查找s
//indexOf方法 查找不到返回1,查找到则返回该元素的下标
while(index!=-1){ //如果存在,次数累加
index=str.indexOf(a,index+1)
n++
}
return n
}
let sum= Finda(str, sub)//调用函数 传参
console.log(sum);
1.3最简洁的方法
//3.split
var str = "asdfadeaeraerta"
var arr=str.split("a")
console.log(arr); //["", "sdf", "de", "er", "ert", ""]
console.log(arr.length-1); //出现了5次
通过split方法转成数组,直接切割要查找的某个字符,从上面打印的arr来看从字符串a的地方断开“ ,”分割
2.统计一个字符串中,出现次数最多的字符,出现第三次
let str ="sdfiraagopijasdfdsaaasfggsdc"
let arr=str.split('') //转换成数组
console.log(arr); //["s", "d", "f", "i", "r", "a", "a", "g", "o", "p", "i", "j", "a", "s", "d", "f", "d", "s", "a", "a", "a", "s", "f", "g", "g", "s", "d", "c"]
let obj={} //声明一个空对象 第一轮遍历完成 {s:1},第二轮 {s:1,d:1}
arr.forEach(item=>{
if(obj[item]){//undefined
obj[item]++
}else{
obj[item]=1
}
})
console.log(obj); //{a: 6, c: 1,d: 4, f: 3,g: 3,i: 2,j: 1,o: 1,p: 1,r: 1,s: 5}
let num=0; //默认出现的次数为0
let sum =null;
for(var key in obj){
console.log(key); //key是obj中的每个属性名
console.log(obj[key],"123"); //obj[key]对应的属性值
if(obj[key]>num){ //判断obj[key]对象中属性名出现的次数与num初始值进行比较
num=obj[key] //出现的次数
sum=key //出现次数最多的字符
}
}
console.log(`出现次数最多的是${sum},出现了${num}`);