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 相关文章推荐
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
Mar 10 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
Apr 17 Javascript
jquery对dom的操作常用方法整理
Jun 25 Javascript
jquery制作搜狐快站页面效果示例分享
Feb 21 Javascript
Angular用来控制元素的展示与否的原生指令介绍
Jan 07 Javascript
jquery插件unobtrusive实现片段式加载
Jun 15 Javascript
javascript删除数组重复元素的方法汇总
Jun 24 Javascript
js 将图片连接转换成base64格式的简单实例
Aug 10 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
Jul 30 Javascript
详细分析单线程JS执行问题
Nov 22 Javascript
详解vue-cli中使用rem,vue自适应
May 06 Javascript
jQuery实现的分页插件完整示例
May 26 jQuery
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
建站常用13种PHP开源CMS比较
2009/08/23 PHP
写的htc的数据表格
2007/01/20 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
详解JavaScript RegExp对象
2017/02/04 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
python实现逻辑回归的方法示例
2017/05/02 Python
Python实现登录接口的示例代码
2017/07/21 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
Python turtle画图库&amp;&amp;画姓名实例
2020/01/19 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
如何打开WebSphere远程debug
2014/10/10 面试题
什么是组件架构
2016/05/15 面试题
美国探亲签证邀请信
2014/02/05 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
社区活动策划方案
2014/08/21 职场文书
单位推荐信范文
2015/03/27 职场文书
教师节班会开场白
2015/06/01 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电