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 相关文章推荐
$.each与$().each的区别示例介绍
Mar 20 Javascript
javascript制作游戏开发碰撞检测的封装代码
Mar 31 Javascript
javascript 判断两个日期之差的示例代码
Sep 05 Javascript
Select下拉框模糊查询功能实现代码
Jul 22 Javascript
浅谈javascript:两种注释,声明变量,定义函数
Oct 05 Javascript
jQuery webuploader分片上传大文件
Nov 07 Javascript
使用vue实现点击按钮滑出面板的实现代码
Jan 10 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 Javascript
详解基于webpack搭建react运行环境
Jun 01 Javascript
Node.js实现注册邮箱激活功能的方法示例
Mar 23 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
Nov 20 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
Dec 06 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 之 没有mysql支持时的替代方案
2006/10/09 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
php实现微信扫码支付
2017/03/26 PHP
javascript 精粹笔记
2010/05/09 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
简单了解什么是神经网络
2017/12/23 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
美国男女折扣服饰百货连锁店:Stein Mart
2017/05/02 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
党员目标管理责任书
2014/07/25 职场文书
务虚会发言材料
2014/12/25 职场文书
人事局接收函
2015/01/31 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书