找出数组中出现次数最多的元素

方法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函数语法以及逗号运算符的相关知识。

原文地址:https://www.cnblogs.com/baixiaoxiao/p/10631033.html