法1: 数组去重 + 双重 for 循环 + 排序 (复杂)
- 选择你喜欢的一种数组去重方法,对原数组进行去重,得到一个去重后的新数组
- 新原数组来一个双重 for 循环,新数组的元素作为键 key,该键在原数组出现的次数 value 作为值,push 到一个新的数组对象中,得到相应元素在原数组中出现的次数
- 对2中得到的数组对象按 value 从大到小进行排序,得到的数组中的第一个对象对应的键 key 即是原数组中出现次数最多的元素
const getResult = (arr) => {
let setArr = [...new Set(arr)]
let resultArr = []
let result = ''
for (let i = 0; i < setArr.length; i++) {
let key = setArr[i]
let value = 0
for (let j = 0; j < arr.length; j++) {
if (setArr[i] === arr[j]) {
value++
}
}
resultArr.push({ key, value })
}
resultArr.sort((a, b) => {
return b.value - a.value
})
result = resultArr[0].key
return result
}
let arr = ['red', 'green', 'red', 'blue', 'blue', 'red', 'blue', 'blue','red','red']
console.log(getResult(arr));
法2: for 循环 + 三元 + if 判断
- 对原数组进行 for 循环
- 如果对象中找不到该键,则动态新增该键名,出现次数为1(值为1);如果对象找得到该键,则动态修改键值(加1)
- 打擂台:比较对象中键值与 0的大小 ,如果比 0 大,则最大的元素为对应的键,出现的次数为值
const getResult1 = (arr) => {
let obj = {}
let maxKey = null
let maxValue = 0
for (let i = 0; i < arr.length; i++) {
obj[arr[i]] == undefined? obj[arr[i]] = 1: obj[arr[i]]++
if(obj[arr[i]]> maxValue){
maxKey = arr[i]
maxValue = obj[arr[i]]
}
}
return maxKey
}
let arr = ['red', 'green', 'red', 'blue', 'blue', 'red', 'blue', 'blue','red','red']
console.log(getResult1(arr));