web前端面试-求数组中出现次数最多的元素
示例:let str = [‘a’, ‘b’, ‘a’, ‘s’, ‘f’, ‘g’, ‘g’, ‘g’, ‘h’, ‘j’, ‘j’, ‘k’, ‘k’, ‘g’, ‘f’, ‘d’, ‘d’, ‘s’, ‘s’, ‘s’, ‘s’, ‘s’, ‘3’, ‘4’, ‘4’, ‘4’, ‘3’, ‘4’, ‘3’];
思路分析:对象+擂台思想
想办法把数组中的所有元素变成新的样子对象:{a:3,b:2,s:6…}
通过对象遍历再用擂主思想找出最大值即可
1.定义一个空对象
2.让数组里面的值等于对象的属性名
3.先判断这个空对象中的属性值是否为undefinty
4.如果这个空对象的属性值不为空那就让这个空对象的属性值+1
5.打印这个空对象,空对象的属性名为这个数组的值,而这个空对象的值为这个数组相同值的个数
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
// 思路:
// 1.定义一个空对象
// 2.让数组里面的值等于对象的属性名
// 3.先判断这个空对象中的属性值是否为undefinty
// 4.如果这个空对象的属性值不为空那就让这个空对象的属性值+1
// 5.打印这个空对象,空对象的属性名为这个数组的值,而这个空对象的值为这个数组相同值的个数
let str = ['a', 'b', 'a', 's', 'f', 'g', 'g', 'g', 'h', 'j', 'j', 'k', 'k', 'g', 'f', 'd', 'd', 's', 's', 's', 's', 's', '3', '4', '4', '4', '3', '4', '3'];
// 定义一个空对象
let obj = {};
// 遍历数组:从数组中取出元素:a b s 3 4...;判定对象中是否存在
str.forEach(function (item) {
// item就是数组中的每个元素:a b s 3 4...
if (obj[item] === undefined) {
// * 不存在:undefined:第一次出现:增加一个当前元素,值为1
obj[item] = 1;
} else {
// * 存在:就有值,说明不是第一次出现:在原来的基础上+1
obj[item]++;
}
});
console.log(obj);
// 求次数最多的字符及次数 擂台思想
// 声明两个变量接收次数最多的属性名和这个属性名的值,属性名暂时为空
let max = "";
let num;
for (key in obj) {
// console.log(key, dx[key]);
if (obj[key] > max) {
max = obj[key];
num = key;
// console.log(num,max);
}
}
console.log("字符串中出现次数最多的字符为:", num, "出现次数为", max);
</script>
</body>
</html>