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玩一玩WSH吧
Feb 23 Javascript
javascript 页面划词搜索JS
Sep 28 Javascript
Bootstrap进度条组件知识详解
May 01 Javascript
jQuery中使用animate自定义动画的方法
May 29 Javascript
AngularJS基础 ng-csp 指令详解
Aug 01 Javascript
jQuery焦点图轮播效果实现方法
Dec 19 Javascript
vue微信分享 vue实现当前页面分享其他页面
Dec 02 Javascript
jQuery替换节点元素的操作方法
Mar 18 jQuery
JS从非数组对象转数组的方法小结
Mar 26 Javascript
jQuery实现table表格checkbox全选的方法分析
Jul 04 jQuery
小程序实现列表点赞功能
Nov 02 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
Apr 22 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中的Traits
2015/07/29 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
python循环监控远程端口的方法
2015/03/14 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
Django中的文件的上传的几种方式
2018/07/23 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
python如何求100以内的素数
2020/05/27 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
项目经理岗位职责
2013/11/11 职场文书
中专毕业生自我鉴定
2014/02/02 职场文书
开学典礼感言
2014/02/16 职场文书
实习生评语
2014/04/26 职场文书
《悯农》教学反思
2014/04/28 职场文书
党员民主生活会材料
2014/12/15 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
mysqldump进行数据备份详解
2022/07/15 MySQL