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 相关文章推荐
json 定义
Jun 10 Javascript
JavaScript 错误处理与调试经验总结
Aug 10 Javascript
关于javascript function对象那些迷惑分析
Oct 24 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
Dec 14 Javascript
使用jQuery管理选择结果
Jan 20 Javascript
javascript实现简单的二级联动
Mar 19 Javascript
JavaScript整除运算函数ceil和floor的区别分析
Apr 14 Javascript
学习javascript面向对象 掌握创建对象的9种方式
Jan 04 Javascript
jquery ajax分页插件的简单实现
Jan 27 Javascript
JS触发服务器控件的单击事件(详解)
Aug 06 Javascript
Node.js读写文件之批量替换图片的实现方法
Sep 07 Javascript
JS模拟实现ECMAScript5新增的数组方法
Mar 20 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 IP转换整形(ip2long)的详解
2013/06/06 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
js几个验证函数代码
2010/03/25 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
javascript history对象详解
2017/02/09 Javascript
vue使用i18n实现国际化的方法详解
2019/09/05 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
简单实现python画圆功能
2018/01/25 Python
Python简单I/O操作示例
2019/03/18 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
质检部岗位职责
2013/11/11 职场文书
历史专业毕业生的自我鉴定
2013/11/15 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
单位工作证明书格式
2014/10/04 职场文书
护士辞职信怎么写
2015/02/27 职场文书
银行求职信怎么写
2019/06/20 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
gateway网关接口请求的校验方式
2021/07/15 Java/Android
Python Matplotlib库实现画局部图
2021/11/17 Python
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
Python如何用re模块实现简易tokenizer
2022/05/02 Python