JS获取数组中出现次数最多及第二多元素的方法


Posted in Javascript onOctober 27, 2017

本文实例讲述了JS获取数组中出现次数最多及第二多元素的方法。分享给大家供大家参考,具体如下:

整型数组中出现次数最多和第二多的元素

用哈希数组

function f(arr){
  var i;
  var length=arr.length;
  var hash=[];//使用哈希数组
  for(i=0;i<length;i++){
    if(!hash[arr[i]])hash[arr[i]]=1;//没有初始化的数组元素为undefined,undefined++为NaN
    else hash[arr[i]]++;
  }
  var max=0;//最多的次数
  var maxV;//出现最多的元素
  var second=0;//第二多的次数
  var secondV;//出现第二多的元素
  hash.forEach(function(item,index){//forEach函数会跳过空元素
    if(item>max){
      second=max;
      secondV=maxV;
      max=item;
      maxV=index;//用索引来保存原数组的值
    }else if(item>second){
      second=item;
      secondV=index;
    }
  });
  return {max,maxV,second,secondV};
}
var arr=[2,2,2,2,3,4,5,4,3,1,4,4,100,100];
var {max,maxV,second,secondV}=f(arr);//ES的元素解构赋值
console.log(max,maxV,second,secondV);

运行结果:

JS获取数组中出现次数最多及第二多元素的方法

数组中出现次数最多和第二多的元素

用对象保存值和次数

function f(arr){
  var temp=[];//对象数组
  var i;
  temp[0]={value:arr[0],index:1};//保存数组元素出现的次数和值
  arr.sort();
  for(i=1;i<arr.length;i++){
    if(arr[i]==arr[i-1]){
      temp[temp.length-1].index++;
    }else{//不相同则新增一个对象元素
      temp.push({index:1,value:arr[i]});
    }
  }
  temp.sort(function(a,b){//按照出现次数从大到小排列
    return a.index<b.index;
  })
  var max=temp[0].index;
  var maxV=temp[0].value;
  var second=temp[1].index;
  var secondV=temp[1].value;
  return {max,maxV,second,secondV};
}
var arr=[2,2,3,4,5,100,100,,3,1,4,4,100,100];
var {max,maxV,second,secondV}=f(arr);
console.log(max,maxV,second,secondV);

运行结果:

JS获取数组中出现次数最多及第二多元素的方法

这种方法不仅可以用于整型数组的统计,还能用于字符数组的统计

以上代码改用ES6的形式书写

function f(arr){
  class num{
    constructor(value){
      this.value=value;
      this.index=1;
    }
    add(){
      this.index++;
    }
  }
  arr.sort();
  let temp=[];
  temp[0]=new num(arr[0]);
  for(let i=1;i<arr.length;i++){
    if(arr[i]==arr[i-1]){
      temp[temp.length-1].add();
    }else{
      temp.push(new num(arr[i]));
    }
  }
  temp.sort(function(a,b){
    return a.index<b.index;
  })
  let max=temp[0].index;
  let maxV=temp[0].value;
  let second=temp[1].index;
  let secondV=temp[1].value;
  return {max,maxV,second,secondV};
}
var arr=['a','b','a','b','a','c','d','d','d','d'];
var {max,maxV,second,secondV}=f(arr);
console.log(max,maxV,second,secondV);

运行结果:

JS获取数组中出现次数最多及第二多元素的方法

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Javascript selection的兼容性写法介绍
Dec 20 Javascript
推荐一个封装好的getElementsByClassName方法
Dec 02 Javascript
js实现遮罩层弹出框的方法
Jan 15 Javascript
JavaScript实现简单的二级导航菜单实例
Apr 15 Javascript
vue-dialog的弹出层组件
May 25 Javascript
Vue.js展示AJAX数据简单示例讲解
Mar 29 Javascript
微信小程序开发animation心跳动画效果
Aug 16 Javascript
jQuery实现动态添加节点与遍历节点功能示例
Nov 09 jQuery
webpack中使用iconfont字体图标的方法
Feb 22 Javascript
推荐15个最好用的JavaScript代码压缩工具
Feb 13 Javascript
JQuery中DOM节点的操作与访问方法实例分析
Dec 23 jQuery
vue项目中使用vue-layer弹框插件的方法
Mar 11 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 #Javascript
Express系列之multer上传的使用
Oct 27 #Javascript
微信小程序返回多级页面的实现方法
Oct 27 #Javascript
微信小程序-getUserInfo回调的实例详解
Oct 27 #Javascript
基于JavaScript实现报警器提示音效果
Oct 27 #Javascript
JavaScript数据结构之双向链表定义与使用方法示例
Oct 27 #Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
Oct 27 #jQuery
You might like
常用星际术语索引(新手指南)
2020/03/04 星际争霸
PHP使用MPDF类生成PDF的方法
2015/12/08 PHP
教你php如何实现验证码
2016/01/20 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
js 数值项目的格式化函数代码
2010/05/14 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
vue项目引入字体.ttf的方法
2018/09/28 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
js动态获取时间的方法分析
2019/08/02 Javascript
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python图像处理之反色实现方法
2015/05/30 Python
python实现泊松图像融合
2018/07/26 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
自荐书模板
2013/12/15 职场文书
民生工作实施方案
2014/05/31 职场文书
庆六一活动总结
2014/08/29 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
查摆问题整改措施
2014/10/24 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
教师考核表个人总结
2015/02/12 职场文书
导游词之潮音寺
2019/09/26 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android