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操作textarea方法集合封装(兼容IE,firefox)
Feb 22 Javascript
jquery专业的导航菜单特效代码分享
Aug 29 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
Oct 29 Javascript
AngularJS bootstrap启动详解及实例代码
Sep 14 Javascript
Bootstrap select实现下拉框多选效果
Dec 23 Javascript
Node.js安装配置图文教程
May 10 Javascript
微信小程序实现移动端滑动分页效果(ajax)
Jun 13 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
Jun 28 Javascript
vue实现商城购物车功能
Nov 27 Javascript
react学习笔记之state以及setState的使用
Dec 07 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
Mar 26 Javascript
js不常见操作运算符总结
Nov 20 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
深入array multisort排序原理的详解
2013/06/18 PHP
CI框架中zip类应用示例
2014/06/17 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
2015/11/06 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
ReactNative页面跳转Navigator实现的示例代码
2017/08/02 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
python集合用法实例分析
2015/05/30 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
Python探索之Metaclass初步了解
2017/10/28 Python
Python实现全排列的打印
2018/08/18 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
北京银河万佳Java面试题
2012/03/21 面试题
师范生实习自我鉴定
2013/11/01 职场文书
专业技术职务聘任书
2014/03/29 职场文书
党课培训心得体会
2014/09/02 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
python图片灰度化处理的几种方法
2021/06/23 Python
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python