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 相关文章推荐
JS控件autocomplete 0.11演示及下载 1月5日已更新
Jan 09 Javascript
CSDN轮换广告图片轮换效果
Mar 27 Javascript
js form action动态修改方法
Nov 04 Javascript
jquery maxlength使用说明
Sep 09 Javascript
返回页面顶部top按钮通过锚点实现(自写)
Aug 30 Javascript
浅析JavaScript中的CSS属性及命名规范
Nov 28 Javascript
JQuery实现表格动态增加行并对新行添加事件
Jul 30 Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 Javascript
利用jQuery实现打字机字幕效果实例代码
Sep 02 Javascript
jQuery取得元素标签名称小结(附代码)
Aug 16 jQuery
Layui 解决表格异步调用后台分页的问题
Oct 26 Javascript
在Chrome DevTools中调试JavaScript的实现
Apr 07 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 巧用数组降低程序的时间复杂度
2010/01/01 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
newxtree.js代码
2007/03/13 Javascript
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
详解pandas赋值失败问题解决
2020/11/29 Python
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
乌克兰在线商店的价格比较:Price.ua
2019/07/26 全球购物
口腔医学技术应届生求职信
2013/11/09 职场文书
运动会开幕式邀请函
2014/02/03 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
安全横幅标语
2014/06/09 职场文书
年检委托书
2014/08/30 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书