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 相关文章推荐
slice函数的用法 之不错的应用
Dec 29 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
Jul 18 Javascript
jQuery中:password选择器用法实例
Jan 03 Javascript
JQuery导航菜单选择特效
Apr 11 Javascript
html+js实现简单的计算器代码(加减乘除)
Jul 12 Javascript
原生js二级联动效果
Jun 20 Javascript
AngularJS日程表案例详解
Aug 15 Javascript
js实现一个简单的MVVM框架示例
Jan 15 Javascript
vuex如何重置所有state(可定制)
Jan 17 Javascript
ionic+html5+API实现双击返回键退出应用
Sep 17 Javascript
jquery实现简单自动轮播图效果
Jul 29 jQuery
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
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中将数组转成XML格式的实现代码
2011/08/08 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
Python获取当前时间的方法
2014/01/14 Python
Python进行数据提取的方法总结
2016/08/22 Python
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
python自动下载图片的方法示例
2020/03/25 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
巴西本土电商平台:Americanas
2020/06/21 全球购物
公司司机岗位职责范本
2014/03/03 职场文书
小学毕业演讲稿
2014/04/25 职场文书
给老婆的保证书范文
2014/04/28 职场文书
企业晚会策划方案
2014/05/29 职场文书
车间核算员岗位职责
2014/07/01 职场文书
日语专业求职信
2014/07/04 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
党员个人年度总结
2015/02/14 职场文书
会计工作检讨书
2015/02/19 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
SQL Server中使用表变量和临时表
2022/05/20 SQL Server