过滤数组中次数出现最多的一项
indexOf() 函数返回某个指定的字符串值在字符串中首次出现的位置(返回的是一个下标,没有匹配到返回 -1 )
flat() 函数用于将嵌套的数组“拉平”,变成一维数组。该方法返回一个新数组,对原数据没有影像
代码过程如下:
// 这是一个二维数组
const list2d = [['1','2'],['9','8','9'],['9','1']]
const flatList = list2d.flat() // 先转化为一维数组
console.log("flatList",flatList); // [ '1', '2', '9', '8', '9', '9','1' ]
// indexOf返回某个指定的字符串值在字符串中首次出现的位置
let obj = {}
flatList.forEach((item,index)=>{
// indexOf()方法 返回某个字符串值在字符串中首次出现的位置(返回的是一个下标)
if(flatList.indexOf(item) == index){
// 内部的循环过程如下:
// 第一次循环 flatList.indexOf(1) = 0 ,index=0 ;说明前者和后者相等;走obj[item] = 1,表示 向obj空对象添加了一个属性 键是1 ,值是1 obj={1:1}
// 第二次循环 flatList.indexOf(2) = 1 ,index=1;说明前者和后者相等; 走obj[item] = 1,表示 向obj空对象添加了一个属性 键是2 ,值也是1 obj={1:1,2:1}
// 第三次循环 flatList.indexOf(9) = 2 ,index=2;说明前者和后者相等; 走obj[item] = 1,表示 向obj空对象添加了一个属性 键是9 ,值也是1 obj={1:1,2:1,9:1}
// 第四次循环 flatList.indexOf(8) = 3 ,index=3;说明前者和后者相等; 走obj[item] = 1,表示 向obj空对象添加了一个属性 键是8 ,值也是1 obj={1:1,2:1,9:1,8:1}
注意看这里:// 第五次循环 flatList.indexOf(9) = 2 ,index=4;说明前者和后者不相等; 走else 表示 obj.9 = obj.9+1 所以 obj={1:1,2:1,9:2,8:1}
// 向下以次类推: 最终结果是 obj: { '1': 2, '2': 1, '8': 1, '9': 3 }
obj[item] = 1
}else{
obj[item] = obj[item] + 1
}
})
let maxNum = 0;
// 找出最大值
for(let i in obj){
if(obj[i] > maxNum){
maxNum = obj[i]
}
}
//根据最大值输出对应的数字
for(let j in obj){
if(obj[j] === maxNum){
console.log('出现次数最多的数字为',j,' ,次数为',obj[j]);
结果如下:
出现次数最多的数字为 9 ,次数为 3
}
}