Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用一个循环查找JS数组中最频繁的项_Javascript_Arrays - Fatal编程技术网

Javascript 使用一个循环查找JS数组中最频繁的项

Javascript 使用一个循环查找JS数组中最频繁的项,javascript,arrays,Javascript,Arrays,我创建了一个函数,该函数使用两个for循环查找JS数组中最频繁的项,并显示该项以及数组中的次数。我如何用一个循环来完成它 var arr=[3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3]; //ta = times appeared / m = max / arrchar = array character var ta = 1; var m = 0; var arrchar; for (var i=0; i<arr.length; i

我创建了一个函数,该函数使用两个for循环查找JS数组中最频繁的项,并显示该项以及数组中的次数。我如何用一个循环来完成它

var arr=[3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3];

//ta = times appeared / m = max / arrchar = array character
var ta = 1;
var m = 0;
var arrchar;

for (var i=0; i<arr.length; i++)
{
        for (var j=i; j<arr.length; j++)
        {
                if (arr[i] == arr[j])
                 m++;
                if (ta<m)
                {
                  ta=m; 
                  arrchar = arr[i];
                }
        }
        m=0;
}
console.log(arrchar+"("+ta +")") ;
var arr=[3',a',a',a',2,3',a',3',a',2,4,9,3];
//ta=出现次数/m=最大值/arrchar=数组字符
var-ta=1;
var m=0;
var-arrchar;

对于(var i=0;i而言,最简单的方法是将每个元素的出现次数按降序排序,并获得第一个值

var arr=[3',a',a',a',2,3',a',3',a',2,4,9,3];
让FindMostFrequency=(arr)=>{
返回[…arr.reduce((op,inp)=>{
运算集(inp,(运算集(inp)| | 0)+1)
返回操作
}排序((a,b)=>b[1]-a[1])[0][0]
}
console.log(findmastfrequency(arr))
这里的神奇单词是哈希表。如果您创建每个项目到计数的映射,那么您可以查找递增并将计数存储在O(1)中,同时还可以存储最大计数:

 let max = null, maxCount = -Infinity;
 const counts = new Map();

 for(const el of arr) {
   const count = (counts.get(el) || 0) + 1;
   counts.set(el, count);
   if(count > maxCount) {
      maxCount = count;
      max = el;
   }
 }

最佳排序是O(n log n)。这不是真正的“一个循环”。@Jonaswillms添加了另一个版本,它只使用单循环进行排序。downvoter留下评论将帮助我了解更多:)