一、使用对象方式求解
- 基本思路
- 首先拿到的是字符串,需要先转变为字符数组,方便后续遍历;
- 遍历转变后的字符数组,依次将字符存入到新建的对象中;
- 放的规则是:字符作为键,当对象中存在这个键,就将值加一,反之加入这个键,将其值设置为1;
- 遍历对象,取出键值的最大值;
- 遍历对象,找出键值最大的对应的键输出即可;
- 代码实现
function cal(str) {
let obj = {};
let arr = [...str];
for (let i = 0; i < arr.length; i++) {
if (obj[arr[i]]) {
obj[arr[i]]++;
} else {
obj[arr[i]] = 1;
}
}
let max = 0;
for (const value in obj) {
if (obj[value] > max) {
max = obj[value];
}
}
for (const value in obj) {
if (obj[value] === max) {
console.log(value);
console.log(obj[value]);
}
}
}
cal("vhsuhvusvusgv");
二、使用ES6新增的map数据结构(基本思路一致,主要是熟悉map的操作)
- 基本思路
- 首先拿到的是字符串,需要先转变为字符数组,方便后续遍历;
- 遍历转变后的字符数组,依次将字符存入到新建的map对象中;
- 放的规则是:字符作为键,当对象中存在这个键,就将值加一,反之加入这个键,将其值设置为1;
- 遍历map对象,取出键值的最大值;
- 遍历map对象,找出键值最大的对应的键输出即可;
- 代码实现
function cal(str) {
let arr = [...str];
let myMap = new Map();
for (let i = 0; i < arr.length; i++) {
if (myMap.has(arr[i])) {
myMap.set(arr[i], myMap.get(arr[i]) + 1)
} else {
myMap.set(arr[i], 1);
}
}
let max = 0;
for (const value of myMap.values()) {
if (value > max) {
max = value;
}
}
console.log(max);
for (const value of myMap.entries()) {
if (value[1] === max) {
console.log(value[0]);
}
}
}
cal("vhsuhvusvusgv");