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获取QueryString的方法小结
Feb 28 Javascript
jquery实现多级下拉菜单的实例代码
Oct 02 Javascript
JS操作数据库的实例代码
Oct 17 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
Nov 20 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
Dec 25 Javascript
jQuery遮罩层效果实例分析
Jan 14 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
Jan 14 Javascript
悬浮广告方法日常收集整理
Mar 18 Javascript
jQuery层级选择器实例代码
Feb 06 Javascript
vue mixins组件复用的几种方式(小结)
Sep 06 Javascript
Vue实现本地购物车功能
Dec 05 Javascript
js回溯法计算最佳旅行线路代码实例
Sep 11 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数组函数
2008/08/18 PHP
PHP 文件扩展名 获取函数
2009/06/03 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
JavaScript基本编码模式小结
2012/05/23 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
python实现多线程的两种方式
2016/05/22 Python
Python实现对字符串的加密解密方法示例
2017/04/29 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
python的faker库用法
2019/11/28 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
Python同时迭代多个序列的方法
2020/07/28 Python
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
邮政员工辞职信
2014/01/16 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
初三班主任寄语大全
2014/04/04 职场文书
个人租房协议书
2014/11/28 职场文书
2015年度保密工作总结
2015/04/24 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书