- 需求:编写一个函数,输入数组,输出数组中重复最多的元素,及对应重复次数
- 这个需求乍看挺简单,但是不花点时间还真搞不定,主要是要理清思路跟方案;这个方案也只是其中一个方案
直接上代码了
- 直接全部复制到编辑器即可运行测试
- 支持输出多个最高次数元素
- 分为两个函数处理了,可以合并,但考虑到可能需求不太一样。
- 希望能给正在看的靓仔一点启发0.0
let arr = [1, 1, 1, 2, 2, 2, 3, 4, 3]
// 需求:编写一个函数,输入数组,输出数组中重复最多的元素,及对应重复次数
// 返回出现最多的元素及其出现次数
function parse(arr) {
let obj = {}
for (let i = 0; i < arr.length; i++) {
key = arr[i].toString()
if (obj[key]) {
obj[key] += 1
} else {
obj[key] = 1
}
}
return getMax(obj) // 返回最终结果
}
function getMax(obj) {
var maxKey
for (key in obj) {
if (maxKey) {
if (obj[key] > obj[maxKey]) {
maxKey = key
}
} else {
maxKey = key
}
}
let res = []
console.log("出现最多的元素如下:")
for (key in obj) {
if (obj[key] == obj[maxKey]) { // 精髓:因为最高数量的可能有多个,所以得出最高数量的元素后只需再对比一下还有哪些元素的数量跟最高是相等的。不然在上面的for循环里面解决这个问题逻辑要复杂得多
res.push(obj)
console.log(`${key}:出现次数最多--次数:${obj[key]}次`)
}
}
return res
}
let res = parse(arr)