Javascript每日一学-找出数组中出现次数最多的元素

题目

今天这篇文章里的题目是这样的,如何找出一个数组中出现次数最多是元素?例如给定一个数组

[3, 5, 6, 5, 9, 8, 10, 5, 7]

其中5出现的次数最多,结果返回5,而且其出现次数为3。接下来我们就一起来看看这道题目的几种实现方式。

以下是github地址,大家可以直接去看源码。

https://github.com/zhouxiongking/article-pages/blob/master/articles/maxFrequencyNum/maxFrequencyNum.js

方法1

实现方法1的主要思想是利用键值对存储,我们可以分解为两个步骤。

定义一个对象,在遍历数组的时候,将数组元素作为对象的键,将出现的次数作为值

获取键值对后进行遍历,获取值最大的那个元素,返回后即可得到结果。

通过以上的思想,我们可以得到以下实现代码。

方法1

因为方法1会首先对数组进行遍历,然后对对象进行遍历,在实现效率上比较低下,不推荐使用。

方法2

实现方法2的主要思想同方法1,不过是方法1的优化,将方法1中的两次遍历缩减为一次遍历,将值的判断放在同一个遍历中。

得到的优化代码如下。

方法2

方法3

方法3的主要思想是借助数组Array的reduce方法。

首先我们来看看reduce方法的使用方法,它的语法如下。

arr.reduce([callback, initialValue])

reduce方法接收的第一个参数为函数,操作数组中的每个元素。该函数接收4个参数,每个参数的含义如下。

第一个参数表示上一次执行结果的回调,或者第二个参数提供的初始值

当前处理的元素值

当前处理元素的索引

处理的数组

reduce方法接收的第二个参数为提供处理元素的初始值,与上面的第一个参数有关。

在了解reduce方法后,我们可以直接看看下面的代码。

方法3

其中reduce接收一个{}表示的初始值,p的初始值就是这个{},k就是每次执行的数组元素。在每次执行完后与maxNum进行比较,动态更新maxNum与maxEle值,最后获得返回的结果。

方法4

方法4的主要思想是借助于字符串的replace方法,因此方法4主要适用于字符数组的运算。

首先将数组转化为字符串,然后通过字符串的replace方法,接收处理函数,其他的原理与方法3一样。

方法4

对于以上的每个方法,我都进行了测试,根据返回的结果来看都验证了方法的正确性。

方法5

方法5其实是利用ES6语法以及逗号运算符进行的代码优化,这个方法看起来代码量很少,但是理解起来却需要花费一定的功夫。建议先学习下ES6函数语法以及逗号运算符的相关知识。

方法5

结束语

感兴趣的可以关注下小编噢,小编会持续输出更多优质的文章的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180620G1ZXRA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券