0
点赞
收藏
分享

微信扫一扫

JS - 过滤数组次数出现最多的一项

Greatiga 2022-02-26 阅读 82

过滤数组中次数出现最多的一项

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
    }
  }


举报

相关推荐

0 条评论