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 继承实现例子
Aug 12 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
Apr 01 Javascript
jquery validate.js表单验证的基本用法入门
May 13 Javascript
jQuery之Deferred对象详解
Sep 04 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
Jan 22 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
Jan 17 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
Mar 06 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
Mar 24 jQuery
vue组件实现文字居中对齐的方法
Aug 23 Javascript
详解easyui基于 layui.laydate日期扩展组件
Jul 18 Javascript
vue组件库的在线主题编辑器的实现思路
Apr 03 Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 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编程效率的方法
2013/11/07 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
2019/05/31 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
解放web程序员的输入验证
2006/10/06 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
基于JS设计12306登录页面
2016/12/28 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
js实现单张图片平移切换效果
2017/10/11 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
python修改txt文件中的某一项方法
2018/12/29 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
Overload和Override的区别
2012/09/02 面试题
《掌声》教学反思
2014/02/23 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
圣诞晚会主持词
2015/07/01 职场文书
秋季运动会加油词
2015/07/18 职场文书
导游词之无锡梅园
2019/11/28 职场文书
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫