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 相关文章推荐
不用ajax实现点击文字即可编辑的方法
Dec 16 Javascript
window.parent与window.openner区别介绍
Apr 12 Javascript
JS常用字符串处理方法应用总结
May 22 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
Apr 05 Javascript
jQuery 获取select选中值及清除选中状态
Dec 13 Javascript
Javascript 链式作用域详细介绍
Feb 23 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
Mar 24 jQuery
详解EasyUi控件中的Datagrid
Aug 23 Javascript
vue中的计算属性的使用和vue实例的方法示例
Dec 04 Javascript
Angular 5.x 学习笔记之Router(路由)应用
Apr 08 Javascript
Jquery的autocomplete插件用法及参数讲解
Mar 12 jQuery
解决微信小程序中的滚动穿透问题
Sep 16 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
PHP 上传文件大小限制
2009/07/05 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
关于document.cookie的使用javascript
2008/04/11 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
2016/04/05 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
大学毕业的自我鉴定
2013/10/08 职场文书
八年级英语教学反思
2014/01/09 职场文书
餐厅考勤管理制度
2014/01/28 职场文书
市场营销毕业求职信
2014/08/07 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python