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 相关文章推荐
Extjs ajax同步请求时post方式参数发送方式
Aug 05 Javascript
JavaScript 注册事件代码
Jan 27 Javascript
json属性名为什么要双引号(个人猜测)
Jul 31 Javascript
Node.js的包详细介绍
Jan 14 Javascript
JS实现环形进度条(从0到100%)效果
Jul 05 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 Javascript
jQuery Validate验证框架详解(推荐)
Dec 17 Javascript
JS组件系列之JS组件封装过程详解
Apr 28 Javascript
4个顶级JavaScript高级文本编辑器
Oct 10 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
Jun 19 Javascript
jQuery实现简单日历效果
Jul 05 jQuery
JavaScript实现点击出现子菜单效果
Feb 08 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实现文件安全下载
2006/10/09 PHP
来自PHP.NET的入门教程
2006/10/09 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
Vue 组件注册全解析
2020/12/17 Vue.js
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
python检测远程端口是否打开的方法
2015/03/14 Python
从Python程序中访问Java类的简单示例
2015/04/20 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
Python安装selenium包详细过程
2019/07/23 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
Python常用编译器原理及特点解析
2020/03/23 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
服装电子商务创业计划书
2014/01/30 职场文书
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
2014年底工作总结
2014/12/15 职场文书
2015年统战工作总结
2015/05/19 职场文书
2016新年年会主持词
2015/07/06 职场文书
申请吧主发表的感言
2015/08/03 职场文书
Python实现打乒乓小游戏
2021/09/25 Python