查找数组中出现频率最高的项(不仅仅是字符串)

chi*_*chi 5 javascript arrays algorithm

有人可以指导我完成这个练习吗?编写一个 JavaScript 程序来查找数组中最频繁的项。

var arr1 = [3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3];
var mf = 1;
var m = 0;
var item;

for (var i = 0; i < arr1.length; i++) {
  for (var j = i; j < arr1.length; j++) {
    if (arr1[i] == arr1[j]) m++;
    if (mf < m) {
      mf = m;
      item = arr1[i];
    }
  }

  m = 0;
}

alert(item + " ( " + mf + " times ) ");
Run Code Online (Sandbox Code Playgroud)

我一直在查看有关 stackoverflow 的一些类似问题,只是找不到我想要的答案。

我的问题是:

  1. 我不明白为什么需要有两个 for 循环。

  2. 为什么需要mfm。好像有点混乱。

  3. 有没有其他解决方法?

A.J*_*A.J 3

用户想要的代码解释:

在这里,他们选择数组的第一个元素,并将其与随后的每个元素进行比较。

m然后,每当相同的元素再次出现时,它们就会增加计数器,即该元素的频率。

还保留一个变量mf来跟踪最大频率。将元素频率与最大频率进行比较并item根据mf当前元素的频率进行更新。

var arr1=[3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3]; //array
var mf = 1; //default maximum frequency
var m = 0;  //counter
var item;  //to store item with maximum frequency
for (var i=0; i<arr1.length; i++)    //select element (current element)
{
        for (var j=i; j<arr1.length; j++)   //loop through next elements in array to compare calculate frequency of current element
        {
                if (arr1[i] == arr1[j])    //see if element occurs again in the array
                 m++;   //increment counter if it does
                if (mf<m)   //compare current items frequency with maximum frequency
                {
                  mf=m;      //if m>mf store m in mf for upcoming elements
                  item = arr1[i];   // store the current element.
                }
        }
        m=0;   // make counter 0 for next element.
}
Run Code Online (Sandbox Code Playgroud)