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 相关文章推荐
使用闭包对setTimeout进行简单封装避免出错
Jul 10 Javascript
ExtJS4 动态生成的grid导出为excel示例
May 02 Javascript
ExtJS4给Combobox设置列表中的默认值示例
May 02 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
Dec 27 Javascript
Vue.js教程之axios与网络传输的学习实践
Apr 29 Javascript
JS触摸事件、手势事件详解
May 04 Javascript
解决ionic和angular上拉加载的问题
Aug 03 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
Feb 26 Javascript
详解关于vue2.0工程发布上线操作步骤
Sep 27 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
Oct 11 Javascript
详释JavaScript执行环境与执行栈
Apr 02 Javascript
Vue开发中常见的套路和技巧总结
Nov 24 Vue.js
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内核探索之解释器的执行过程
2015/12/22 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
javascript input输入框模糊提示功能的实现
2017/09/25 Javascript
Python 代码性能优化技巧分享
2012/08/07 Python
Python文档生成工具pydoc使用介绍
2015/06/02 Python
Python松散正则表达式用法分析
2016/04/29 Python
python日志记录模块实例及改进
2017/02/12 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
EJB实例的生命周期
2016/10/28 面试题
生物化学研究助理员求职信
2013/10/09 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
中文专业求职信
2014/06/20 职场文书
小学庆六一活动总结
2014/08/28 职场文书
学术研讨会主持词
2015/07/04 职场文书
校运会宣传稿大全
2015/07/23 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript
TV动画《间谍过家家》公开PV
2022/03/20 日漫