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 注册事件代码
Jan 27 Javascript
node.js中的fs.fchmodSync方法使用说明
Dec 16 Javascript
有效提高JavaScript执行效率的几点知识
Jan 31 Javascript
jquery简单的弹出层浮动层代码
Apr 27 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
May 09 Javascript
jQuery自定义数值抽奖活动代码
Jun 11 Javascript
javascript简单实现等比例缩小图片的方法
Jul 27 Javascript
详解小程序原生使用ES7 async/await语法
Aug 06 Javascript
微信小程序实现选项卡效果
Nov 06 Javascript
JavaScript基于遍历操作实现对象深拷贝功能示例
Mar 05 Javascript
基于Node.js的大文件分片上传示例
Jun 19 Javascript
vue中如何添加百度统计代码
Dec 19 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中3种方法删除字符串中间的空格
2014/03/10 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
Javascript的并行运算实现代码
2010/11/19 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
详解vue组件通信的三种方式
2017/06/30 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python解决八皇后问题示例
2018/04/22 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
Django封装交互接口代码
2020/07/12 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
医科学校毕业生自荐信
2013/11/09 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
大学新闻系自荐书
2014/05/31 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
《角的度量》教学反思
2016/02/18 职场文书