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 相关文章推荐
javascript十个最常用的自定义函数(中文版)
Sep 07 Javascript
js静态方法与实例方法分析
Jul 04 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
Apr 12 Javascript
《JavaScript函数式编程》读后感
Aug 07 Javascript
js遍历map javaScript遍历map的简单实现
Aug 26 Javascript
判断js的Array和Object的实现方法
Aug 29 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
Oct 21 Javascript
easyui combobox开启搜索自动完成功能的实例代码
Nov 08 Javascript
详解vue 实例方法和数据
Oct 23 Javascript
解决option标签selected=&quot;selected&quot;属性失效的问题
Nov 06 Javascript
使用ajax的post同步执行(实现方法)
Dec 21 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
Nov 02 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/10/12 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
jQuery实现滚动效果
2017/11/17 jQuery
vue中使用cropperjs的方法
2018/03/01 Javascript
JS精确判断数据类型代码实例
2019/12/18 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
pyqt和pyside开发图形化界面
2014/01/22 Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
python中实现k-means聚类算法详解
2017/11/11 Python
python实现爬取图书封面
2018/07/05 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
Java程序员综合测试题
2014/04/25 面试题
班组长安全职责
2014/01/05 职场文书
大堂副理的岗位职责范文
2014/02/17 职场文书
态度决定一切演讲稿
2014/05/20 职场文书
2014年财务部工作总结
2014/11/11 职场文书
暑期社会实践证明书
2014/11/17 职场文书
理想国读书笔记
2015/06/25 职场文书