面试的过程中一般都会遇到这个笔试题,我也尝试写了一下。
- 首先要循环字符串求出每个字符出现的个数,将字符的数量存储到对象
obj
中,字符为键,数量为值。如果obj
对象存在当前遍历字符键名,说明已经出现过,所以把这个键值+1,若没有就给obj
对象添加一个新的字符属性,属性值为1,最终obj
的对象。
let str='ffeffdsfighdsieeeeeeeee';
let obj={};
for (let i = 0; i < str.length; i++) {
if (obj[str[i]]) {
obj[str[i]] += 1;
} else {
obj[str[i]] = 1
}
}
![](https://img.haomeiwen.com/i16932189/a880e9ae3009b49a.png)
-
obj
对象已经获取到,现在需要比较属性值的大小。用到了Object
(构造函数创建一个对象包装器。ie
不支持,查看兼容)下的一个方法Object.entries(obj)
,它的作用就是将对象分成一个数组,数组的元素是属性名和属性值组成的嵌套数组。结果如下。
let res = Object.entries(obj)
console.log(res)
![](https://img.haomeiwen.com/i16932189/28cc91b902bcec34.png)
- 最后使用数组的
sort
方法进行排序,求出出现最多字符的个数。
res.sort((a, b) => {
if (a[1] > b[1]) {
return 1
} else {
return -1
}
})
- 封装的获取函数代码如下。
let str = 'ffeffdsfighdsieeeeeeeee';
function getNum(x) {
let obj = {};//求出每个字符出现的个数
for (let i = 0; i < x.length; i++) {
if (obj[x[i]]) {
obj[x[i]] += 1;
} else {
obj[x[i]] = 1
}
}
let res = Object.entries(obj)//将个数排序
res.sort((a, b) => {
if (a[1] > b[1]) {
return 1
} else {
return -1
}
})
return res[res.length - 1][0] + '数量' + res[res.length - 1][1]//返回最大的个数字符,
}
console.log(getNum(str))
![](https://img.haomeiwen.com/i16932189/d864fb11bfd14e9b.png)
网友评论